前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图:

客户端(subscriber)向服务器(publisher)订阅消息,然后服务器可以将消息推送到所有订阅了消息的客户端,这里也可以理解为广播吧。。。。

好了,闲话不多说了,直接上用ZeroMQ实现这种通信模式的代码吧:

(1)服务端(publisher):

[java] view plaincopy
  1. package pubsub;
  2. import org.zeromq.ZMQ;
  3. public class Publisher {
  4. public static void main(String args[]) {
  5. ZMQ.Context context = ZMQ.context(1);  //创创建包含一个I/O线程的context
  6. ZMQ.Socket publisher = context.socket(ZMQ.PUB);   //创建一个publisher类型的socket,他可以向所有订阅的subscriber广播数据
  7. publisher.bind(”tcp://*:5555”);  //将当前publisher绑定到5555端口上,可以接受subscriber的订阅
  8. while (!Thread.currentThread ().isInterrupted ()) {
  9. String message = ”fjs hello”;  //最开始可以理解为pub的channel,subscribe需要订阅fjs这个channel才能接收到消息
  10. publisher.send(message.getBytes());
  11. }
  12. publisher.close();
  13. context.term();
  14. }
  15. }

代码很简单吧,这里publisher来充当服务端,所有的subscriber都需要建立于publisher的连接。,,。,

(2)客户端(subscriber)代码:

[java] view plaincopy
  1. package pubsub;
  2. import org.zeromq.ZMQ;
  3. public class Subscriber {
  4. public static void main(String args[]) {
  5. for (int j = 0; j < 100; j++) {
  6. new Thread(new Runnable(){
  7. public void run() {
  8. // TODO Auto-generated method stub
  9. ZMQ.Context context = ZMQ.context(1);  //创建1个I/O线程的上下文
  10. ZMQ.Socket subscriber = context.socket(ZMQ.SUB);     //创建一个sub类型,也就是subscriber类型的socket
  11. subscriber.connect(”tcp://127.0.0.1:5555”);    //与在5555端口监听的publisher建立连接
  12. subscriber.subscribe(”fjs”.getBytes());     //订阅fjs这个channel
  13. for (int i = 0; i < 100; i++) {
  14. byte[] message = subscriber.recv();  //接收publisher发送过来的消息
  15. System.out.println(”receive : ” + new String(message));
  16. }
  17. subscriber.close();
  18. context.term();
  19. }
  20. }).start();
  21. }
  22. }
  23. }

这里需要注意订阅的channel问题,如果这里错了的话,subscriber是不会受到publisher发送过来的数据的

好了,到这里publish/subscribe的实现就算ok了

ZeroMQ(java)之Publish/Subscribe模式相关推荐

  1. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  2. Publish/SubScribe(发布/订阅)模式

    前言 上一篇文章中,我们讲了如何利用Observer(观察者)模式实现多选框的全选, 本篇文章将带来Publish/SubScribe模式,并且利用该模式实现一个简易的消息通知功能,文章的最后还与Ob ...

  3. Java(发布/订阅模式)

    1.概述 观察者模式又称为发布/订阅(Publish/Subscribe)模式 观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer) (1)Subject模块 Subjec ...

  4. javascript设计模式——Publish/Subscribe

    推荐阅读http://dev.housetrip.com/2014/09/15/decoupling-javascript-apps-using-pub-sub-pattern/ 我们先引出问题的所在 ...

  5. 实现OPC UA publish/subscribe单次发送

    最近一直在写OPC UA publish/subscribe 模式的程序,发现程序设置好之后,数据就源源不断地发出来了.但是令人困惑的是变量值明明没有改变,数据会连续不断地重复发送,根本停不下来 .网 ...

  6. ZeroMQ之Publish/Subscribe (Java)

    前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图: 客户端(subscrib ...

  7. RabbitMQ工作模式Publish/Subscribe发布订阅,test测试代码

    RabbitMQ有以下几种工作模式 : 1.Work queues  工作队列 2.Publish/Subscribe 发布订阅 3.Routing      路由 4.Topics        通 ...

  8. 【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)

    [RabbitMQ]基础三:发布与订阅模式(Publish/Subscribe) 1. 订阅模式 2. 发布与订阅模式说明 3. 代码示例 3.1 生产者 3.2 消费者 3.3 测试 4. 总结 1 ...

  9. RabbitMQ发布/订阅模式(Publish/Subscribe)

    工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...

最新文章

  1. 目标检测--SSD: Single Shot MultiBox Detector
  2. Java并发程序设计(四)JDK并发包之同步控制
  3. testNG的DataProvider返回IteratorObject[]的妙用
  4. python没有指针如何实现链表_[转]为什么python标准库没有实现链表
  5. mysql2003错误如何解决_如何安装最新版redis6错误解决以及配置开机启动等
  6. Openssl 之大数运算函数 BN
  7. openstack社区_OpenStack社区中发生了什么?
  8. shiro整合ehcache Cannot resolve reference to bean 'securityManager' while setting bean property 'secur
  9. 【趣味实践】自动补帧算法——RIFE的使用
  10. Matlab二元函数图像绘制
  11. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  12. java 找出重复的数据_java 查找list中重复数据实例详解
  13. 计算机为什么能做翻译,为什么计算机能翻译?
  14. web在网页中引用字体包(.ttf)嵌入特殊字体
  15. Linux中yum yum yum
  16. 如何保存php网页到桌面,如何将网页保存到电脑桌面上
  17. 讲解视频质量,视频质量测试,主观客观评价视频质量
  18. 李逵遇上李鬼 2009中国IT运维第一案始末
  19. openldap自主密码管理系统配置
  20. 服务器部署随笔-nfs minio 端口映射

热门文章

  1. 什么是Node.js?(转)
  2. TOPSIS 优劣解距离法
  3. 【最简单解决办法】:module ‘tensorflow.compat.v1‘ has no attribute ‘contrib‘
  4. 风尚云网前端-vue中动态显示动态时间2种方式
  5. pikachu靶场越权漏洞实战
  6. 川菜 in English
  7. 工业计算机与商用计算机的区别
  8. Python 自学记录(自定义爬取图片类型,页数 爬取站长之家图片)
  9. php 图片裁剪保存,PHP实现图片裁剪、添加水印效果代码
  10. 电脑卡,反应速度变慢了,应该这样子弄.