前面的文章介绍了比较简单的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了

转载于:https://www.cnblogs.com/jym-sunshine/p/5441470.html

ZeroMQ之Publish/Subscribe (Java)相关推荐

  1. ZeroMQ(java)之Publish/Subscribe模式

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

  2. 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅

    在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-am ...

  3. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster

    Distributed Publish Subscribe in Cluster 基本定义 在单机环境下订阅与发布是很常用的,然而在集群环境是比较麻烦和不好实现的: AKKA已经提供了相应的实现,集群 ...

  4. RabbitMQ消息队列:发布/订阅(Publish/Subscribe)

    2019独角兽企业重金招聘Python工程师标准>>> 前面我们把每个Message都是deliver到某个单一的Consumer.今天我们将了解如何把同一个Message deli ...

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

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

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

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

  7. RabbitMQ教程 3.发布/订阅(Publish/Subscribe)

    搜索:Java课代表,关注公众号,及时获取更多Java干货. 3 发布/订阅(Publish/Subscribe) 在上一节中,我们创建了一个工作队列.其目的是将每个任务只分发给一个worker.本节 ...

  8. Publish/Subscribe 发布与订阅模式

    Publish/Subscribe 发布与订阅: 通过交换机来实现,一个生产者可以让不同队列的消费者同时得到消息 生产者: package Fanout; import com.rabbitmq.cl ...

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

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

最新文章

  1. 编程软件python图片-python Plotly绘图工具的简单使用
  2. Maven学习总结(8)——使用Maven构建多模块项目
  3. Tomcat端口被占用:starting Tomcat8.0 server at localhost has encountered a problem
  4. linux prc 时区,授时时区问题解决
  5. restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...
  6. 【软件测试】单元测试的主要任务不包括全局数据结构
  7. resource和autowired
  8. 为用户增加sudo权限(修改sudoers文件)
  9. jquery $(document).ready() 与window.onload的区别(转)
  10. 采用Minitab进行logistic回归分析
  11. 智慧路灯控制系统解决方案
  12. Investigating Typed Syntactic Dependencies for Targeted Sentiment Classification Using GAT(2020)
  13. VBA综合应用——解压并剔除Excel敏感数据
  14. Jira中的全流程开发管理
  15. 生成子空间的交空间与和空间
  16. 【基础教程】Python整数类型(int)详解
  17. Layabox学习笔记
  18. 论文查重的步骤是什么?
  19. QQ小游戏 BannerAd 创建banner广告组件 API
  20. 我如何看待软件测试的前景?

热门文章

  1. Ubuntu下使用WebStorm开发nodejs(一)
  2. Ubuntu系统如何安装nodejs及npm
  3. mysql5.5连接器_MySQL :: MySQL 5.1参考手册 :: 26. 连接器
  4. sourcetree打开快捷_Sourcetree使用:拉取打开项目的步骤
  5. python list查找元素下标_Python 查找list中的某个元素的所有的下标方法
  6. 计算机无法找到实达打印机,实达打印机使用方法教程
  7. 计算广告学(Computational Advertising)CA
  8. tomcat java环境变量配置
  9. hdu5459(2015沈阳网络赛J题)
  10. ajax 批量上传图片插件,jQuery多文件上传插件jquery.imageuploader.js