ZeroMQ(java)之Publish/Subscribe模式
来源:互联网 发布:打开文件软件下载 编辑:程序博客网 时间:2024/05/21 08:02
前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图:
客户端(subscriber)向服务器(publisher)订阅消息,然后服务器可以将消息推送到所有订阅了消息的客户端,这里也可以理解为广播吧。。。。
好了,闲话不多说了,直接上用ZeroMQ实现这种通信模式的代码吧:
(1)服务端(publisher):
- package pubsub;
- import org.zeromq.ZMQ;
- public class Publisher {
- public static void main(String args[]) {
- ZMQ.Context context = ZMQ.context(1); //创创建包含一个I/O线程的context
- ZMQ.Socket publisher = context.socket(ZMQ.PUB); //创建一个publisher类型的socket,他可以向所有订阅的subscriber广播数据
- publisher.bind("tcp://*:5555"); //将当前publisher绑定到5555端口上,可以接受subscriber的订阅
- while (!Thread.currentThread ().isInterrupted ()) {
- String message = "fjs hello"; //最开始可以理解为pub的channel,subscribe需要订阅fjs这个channel才能接收到消息
- publisher.send(message.getBytes());
- }
- publisher.close();
- context.term();
- }
- }
代码很简单吧,这里publisher来充当服务端,所有的subscriber都需要建立于publisher的连接。,,。,
(2)客户端(subscriber)代码:
- package pubsub;
- import org.zeromq.ZMQ;
- public class Subscriber {
- public static void main(String args[]) {
- for (int j = 0; j < 100; j++) {
- new Thread(new Runnable(){
- public void run() {
- // TODO Auto-generated method stub
- ZMQ.Context context = ZMQ.context(1); //创建1个I/O线程的上下文
- ZMQ.Socket subscriber = context.socket(ZMQ.SUB); //创建一个sub类型,也就是subscriber类型的socket
- subscriber.connect("tcp://127.0.0.1:5555"); //与在5555端口监听的publisher建立连接
- subscriber.subscribe("fjs".getBytes()); //订阅fjs这个channel
- for (int i = 0; i < 100; i++) {
- byte[] message = subscriber.recv(); //接收publisher发送过来的消息
- System.out.println("receive : " + new String(message));
- }
- subscriber.close();
- context.term();
- }
- }).start();
- }
- }
- }
这里需要注意订阅的channel问题,如果这里错了的话,subscriber是不会受到publisher发送过来的数据的
好了,到这里publish/subscribe的实现就算ok了
0 0
- ZeroMQ(java)之Publish/Subscribe模式
- ZeroMQ(java)之Publish/Subscribe模式
- ZeroMQ(java)之Publish/Subscribe模式
- ZeroMQ之模式二 发布者订阅者(publish-subscribe)
- .[ZeroMQ] messaging pattern -- publish/subscribe
- 观察者模式 Publish/Subscribe
- RabbitMq之Publish/Subscribe
- RabbitMQ之Publish/Subscribe
- redis之发布与订阅(publish/subscribe模式)
- 订阅发布模式(Subscribe/Publish)
- 订阅发布模式(Subscribe/Publish)
- JavaScript-观察者模式(publish/subscribe)
- 订阅模式(publish-subscribe)
- RabbitMQ案例之Publish/Subscribe
- RabbitMQ之三 Publish/Subscribe
- Observer模式 (或称为Publish-Subscribe模式)
- 设计模式---订阅发布模式(Subscribe/Publish)
- 设计模式---订阅发布模式(Subscribe/Publish)
- jython LookupError: unknown encoding 'ms936' 解决办法
- C++编译器与链接器工作原理
- ZeroMQ(java)之Requerst/Response模式
- spring jdbc mapper
- C语言涉及地址, 指针等符号的英语读法,有助于语法理解
- ZeroMQ(java)之Publish/Subscribe模式
- 跳槽风波的感悟
- 智能机的崛起与移动时代
- uva10410(dbl)
- ZeroMQ(java)之Push/Pull模式
- hibernate中自定义主键生成器
- 过滤Java中特殊字符
- 海量数据存储
- IOS ARC与非ARC之间的转换