上一篇博客介绍了基于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学习 – 概念学习之消息(Message)与发布订阅(Publish Subscribe)