NATS学习 -- 实践之发布订阅(Publish Subscribe)续

上一篇博客介绍了基于java的NATS的发布订阅模式。

今天发现其实服务器我们可以不用启动,因为nats为我们提供了一个服务器,可以用来测试。

demo.nats.io

好的,我们直接进入今天的主题。

今天采用一个 simple Java client for NATS

参考地址

NATS学习 – 概念学习之消息(Message)与发布订阅(Publish Subscribe)

使用很简单

依赖的jar包

<!--主要依赖的-->
<dependency>
    <groupId>com.github.cloudfoundry-community</groupId>
    <artifactId>nats-client</artifactId>
    <version>0.6.4</version>
</dependency>
<!--nats-client依赖-->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>5.0.0.Alpha2</version>
</dependency>
<!--需要的jackson依赖-->
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.4.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.4.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.4.0</version>
</dependency>
<!--需要的日志依赖-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

Publish.java


import java.util.Scanner;

import nats.client.Nats;
import nats.client.NatsConnector;

public class Publish {
    public static void main(String[] args) {
        Nats nats = new NatsConnector().addHost("nats://demo.nats.io:4222").connect();

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串:");

        while (true) {
            String line = scanner.nextLine();
            // 发布消息
            nats.publish("hello", line);
        }

    }

}

Subscribe.java

package com.gwc.mavenlearn.jnats;

import java.util.concurrent.TimeUnit;

import nats.client.Message;
import nats.client.MessageHandler;
import nats.client.MessageIterator;
import nats.client.Nats;
import nats.client.NatsConnector;
import nats.client.Subscription;

public class Subscribe {
    public static void main(String[] args) {
        Nats nats = new NatsConnector().addHost("nats://demo.nats.io:4222").connect();

        Subscription subscription = nats.subscribe("hello");

        // 多个消息处理器

        // Multiple message handlers
        subscription.addMessageHandler(new MessageHandler() {
            public void onMessage(Message message) {
                System.out.println("Handler 1");
                System.out.println(message.getBody());
            }
        });
        subscription.addMessageHandler(new MessageHandler() {
            public void onMessage(Message message) {
                System.out.println("Handler 2");
                System.out.println(message.getBody());
            }
        });

        // 下面的程序主要是为了不让程序退出,不退出才能收到消息
        // 可以有如下三种方式不让程序退出
        // Block until a message arrives (message handlers still get called)
        MessageIterator iterator = subscription.iterator();
        Message message = iterator.next();

        // Or we can block for a limited amount of time
        // message = iterator.next(1, TimeUnit.MINUTES);

        // Or we can just use a for loop
        /*for (Message message1 : subscription) { System.out.println(message1); }*/

    }

}

实验

就绪的Subscribe
这里写图片描述

就绪的Publish
这里写图片描述

发消息和收消息
发消息
NATS学习 -- 实践之发布订阅(Publish Subscribe)续_第1张图片
收消息
NATS学习 -- 实践之发布订阅(Publish Subscribe)续_第2张图片

关于日志的配置,参考上一篇博客

NATS学习 – 概念学习之消息(Message)与发布订阅(Publish Subscribe)

参考文献

simple Java client for NATS

NATS API Documentation

你可能感兴趣的:(订阅,发布,nats)