Nats
要使用Nats首先下载一下NATS的服务器
https://pan.baidu.com/s/1-rIxk6X2k22e8AEQEFIcUA
密码: x4fx
首先介绍一下Nats
Nats有三种模式
1.订阅者模式
发布者在主题上发布消息,只要是订阅了该主题,跟在线的都能收到发布者发布的消息.如果没有订阅该主题或者不在线的,那么就不能收到发布者发布的消息.
2.消息队列
消息队列是基于订阅者模式,所有按照订阅者来发送消息
发布者发送消息时所有订阅该主题以及在线的订阅者都能收到发布者发布的消息,然而这些订阅者如果形成一个队列时,那么发布者发布消息,NATS会随机选择一个订阅者来接收消息而不是所有的订阅者都能收到消息.
3.请求响应
发布者使用Request()到订阅者的同时,内部又自己订阅了Message.getRepelyTo然而这个ReplyTo当完成一次请求响应就会失效.
使用Request()会订阅另外一个主题,然而只要往ReplyTo发送消息发布者就会接收订阅者的响应
二话不说线上代码
首先是导包:
maven加上依赖
<dependency>
<groupId>io.nats</groupId>
<artifactId>java-nats-streaming</artifactId>
<version>0.5.0</version>
</dependency>
订阅者生产者代码:
public class getUserJob implements Job {
@Autowired
private UserService userService;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
ConnectionFactory cf = new ConnectionFactory();
Connection connection = null;
try {
connection = cf.createConnection();
Message msg = new Message();
msg.setSubject("subscribe");//订阅主题
UserEntity entity = userService.getById("1");
msg.setData(entity.toString().getBytes());//发送得消息
// 发布消息
connection.publish(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
订阅者消费者代码
public class Subsceber1 {
public static void main(String[] args) throws IOException {
Subsceber1 subsceber1 = new Sub