ZeroMQ(java)之Publish/Subscribe模式
前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图:
客户端(subscriber)向服务器(publisher)订阅消息,然后服务器可以将消息推送到所有订阅了消息的客户端,这里也可以理解为广播吧。。。。
好了,闲话不多说了,直接上用ZeroMQ实现这种通信模式的代码吧:
(1)服务端(publisher):
![](https://code.csdn.net/assets/CODE_ico.png)
- 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();
- }
- }
![](http://static.blog.csdn.net/images/save_snippets.png)
代码很简单吧,这里publisher来充当服务端,所有的subscriber都需要建立于publisher的连接。,,。,
(2)客户端(subscriber)代码:
![](https://code.csdn.net/assets/CODE_ico.png)
- 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();
- }
- }
- }
![](http://static.blog.csdn.net/images/save_snippets.png)
这里需要注意订阅的channel问题,如果这里错了的话,subscriber是不会受到publisher发送过来的数据的
好了,到这里publish/subscribe的实现就算ok了
ZeroMQ(java)之Publish/Subscribe模式相关推荐
- RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)
1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...
- Publish/SubScribe(发布/订阅)模式
前言 上一篇文章中,我们讲了如何利用Observer(观察者)模式实现多选框的全选, 本篇文章将带来Publish/SubScribe模式,并且利用该模式实现一个简易的消息通知功能,文章的最后还与Ob ...
- Java(发布/订阅模式)
1.概述 观察者模式又称为发布/订阅(Publish/Subscribe)模式 观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer) (1)Subject模块 Subjec ...
- javascript设计模式——Publish/Subscribe
推荐阅读http://dev.housetrip.com/2014/09/15/decoupling-javascript-apps-using-pub-sub-pattern/ 我们先引出问题的所在 ...
- 实现OPC UA publish/subscribe单次发送
最近一直在写OPC UA publish/subscribe 模式的程序,发现程序设置好之后,数据就源源不断地发出来了.但是令人困惑的是变量值明明没有改变,数据会连续不断地重复发送,根本停不下来 .网 ...
- ZeroMQ之Publish/Subscribe (Java)
前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图: 客户端(subscrib ...
- RabbitMQ工作模式Publish/Subscribe发布订阅,test测试代码
RabbitMQ有以下几种工作模式 : 1.Work queues 工作队列 2.Publish/Subscribe 发布订阅 3.Routing 路由 4.Topics 通 ...
- 【RabbitMQ】基础三:发布与订阅模式(Publish/Subscribe)
[RabbitMQ]基础三:发布与订阅模式(Publish/Subscribe) 1. 订阅模式 2. 发布与订阅模式说明 3. 代码示例 3.1 生产者 3.2 消费者 3.3 测试 4. 总结 1 ...
- RabbitMQ发布/订阅模式(Publish/Subscribe)
工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...
最新文章
- 目标检测--SSD: Single Shot MultiBox Detector
- Java并发程序设计(四)JDK并发包之同步控制
- testNG的DataProvider返回IteratorObject[]的妙用
- python没有指针如何实现链表_[转]为什么python标准库没有实现链表
- mysql2003错误如何解决_如何安装最新版redis6错误解决以及配置开机启动等
- Openssl 之大数运算函数 BN
- openstack社区_OpenStack社区中发生了什么?
- shiro整合ehcache Cannot resolve reference to bean 'securityManager' while setting bean property 'secur
- 【趣味实践】自动补帧算法——RIFE的使用
- Matlab二元函数图像绘制
- QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
- java 找出重复的数据_java 查找list中重复数据实例详解
- 计算机为什么能做翻译,为什么计算机能翻译?
- web在网页中引用字体包(.ttf)嵌入特殊字体
- Linux中yum yum yum
- 如何保存php网页到桌面,如何将网页保存到电脑桌面上
- 讲解视频质量,视频质量测试,主观客观评价视频质量
- 李逵遇上李鬼 2009中国IT运维第一案始末
- openldap自主密码管理系统配置
- 服务器部署随笔-nfs minio 端口映射
热门文章
- 什么是Node.js?(转)
- TOPSIS 优劣解距离法
- 【最简单解决办法】:module ‘tensorflow.compat.v1‘ has no attribute ‘contrib‘
- 风尚云网前端-vue中动态显示动态时间2种方式
- pikachu靶场越权漏洞实战
- 川菜 in English
- 工业计算机与商用计算机的区别
- Python 自学记录(自定义爬取图片类型,页数 爬取站长之家图片)
- php 图片裁剪保存,PHP实现图片裁剪、添加水印效果代码
- 电脑卡,反应速度变慢了,应该这样子弄.