ZeroMQ之Publish/Subscribe (Java)
前面的文章介绍了比较简单的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了
转载于:https://www.cnblogs.com/jym-sunshine/p/5441470.html
ZeroMQ之Publish/Subscribe (Java)相关推荐
- ZeroMQ(java)之Publish/Subscribe模式
前面的文章介绍了比较简单的Request/Subscribe模式, 这篇文章介绍更为经典的Publish/Subscribe通信模式用来ZeroMQ的实现,其通信方式如下图: 客户端(subscrib ...
- 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-am ...
- AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster
Distributed Publish Subscribe in Cluster 基本定义 在单机环境下订阅与发布是很常用的,然而在集群环境是比较麻烦和不好实现的: AKKA已经提供了相应的实现,集群 ...
- RabbitMQ消息队列:发布/订阅(Publish/Subscribe)
2019独角兽企业重金招聘Python工程师标准>>> 前面我们把每个Message都是deliver到某个单一的Consumer.今天我们将了解如何把同一个Message deli ...
- 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教程 3.发布/订阅(Publish/Subscribe)
搜索:Java课代表,关注公众号,及时获取更多Java干货. 3 发布/订阅(Publish/Subscribe) 在上一节中,我们创建了一个工作队列.其目的是将每个任务只分发给一个worker.本节 ...
- Publish/Subscribe 发布与订阅模式
Publish/Subscribe 发布与订阅: 通过交换机来实现,一个生产者可以让不同队列的消费者同时得到消息 生产者: package Fanout; import com.rabbitmq.cl ...
- RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)
1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...
最新文章
- 编程软件python图片-python Plotly绘图工具的简单使用
- Maven学习总结(8)——使用Maven构建多模块项目
- Tomcat端口被占用:starting Tomcat8.0 server at localhost has encountered a problem
- linux prc 时区,授时时区问题解决
- restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...
- 【软件测试】单元测试的主要任务不包括全局数据结构
- resource和autowired
- 为用户增加sudo权限(修改sudoers文件)
- jquery $(document).ready() 与window.onload的区别(转)
- 采用Minitab进行logistic回归分析
- 智慧路灯控制系统解决方案
- Investigating Typed Syntactic Dependencies for Targeted Sentiment Classification Using GAT(2020)
- VBA综合应用——解压并剔除Excel敏感数据
- Jira中的全流程开发管理
- 生成子空间的交空间与和空间
- 【基础教程】Python整数类型(int)详解
- Layabox学习笔记
- 论文查重的步骤是什么?
- QQ小游戏 BannerAd 创建banner广告组件 API
- 我如何看待软件测试的前景?
热门文章
- Ubuntu下使用WebStorm开发nodejs(一)
- Ubuntu系统如何安装nodejs及npm
- mysql5.5连接器_MySQL :: MySQL 5.1参考手册 :: 26. 连接器
- sourcetree打开快捷_Sourcetree使用:拉取打开项目的步骤
- python list查找元素下标_Python 查找list中的某个元素的所有的下标方法
- 计算机无法找到实达打印机,实达打印机使用方法教程
- 计算广告学(Computational Advertising)CA
- tomcat java环境变量配置
- hdu5459(2015沈阳网络赛J题)
- ajax 批量上传图片插件,jQuery多文件上传插件jquery.imageuploader.js