与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同监听一个Topic,然后循环给这个Topic中发送多个消息。

view plaincopy to clipboardprint?
  1. import javax.jms.Connection;
  2. import javax.jms.JMSException;
  3. import javax.jms.Message;
  4. import javax.jms.MessageConsumer;
  5. import javax.jms.MessageListener;
  6. import javax.jms.MessageProducer;
  7. import javax.jms.Session;
  8. import javax.jms.TextMessage;
  9. import javax.jms.Topic;
  10. import org.apache.activemq.ActiveMQConnectionFactory;
  11. import org.apache.activemq.command.ActiveMQTopic;
  12. public class TopicTest {
  13. public static void main(String[] args) throws Exception {
  14. ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
  15. Connection connection = factory.createConnection();
  16. connection.start();
  17. //创建一个Topic
  18. Topic topic= new ActiveMQTopic("testTopic");
  19. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  20. //注册消费者1
  21. MessageConsumer comsumer1 = session.createConsumer(topic);
  22. comsumer1.setMessageListener(new MessageListener(){
  23. public void onMessage(Message m) {
  24. try {
  25. System.out.println("Consumer1 get " + ((TextMessage)m).getText());
  26. } catch (JMSException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. });
  31. //注册消费者2
  32. MessageConsumer comsumer2 = session.createConsumer(topic);
  33. comsumer2.setMessageListener(new MessageListener(){
  34. public void onMessage(Message m) {
  35. try {
  36. System.out.println("Consumer2 get " + ((TextMessage)m).getText());
  37. } catch (JMSException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. });
  42. //创建一个生产者,然后发送多个消息。
  43. MessageProducer producer = session.createProducer(topic);
  44. for(int i=0; i<10; i++){
  45. producer.send(session.createTextMessage("Message:" + i));
  46. }
  47. }
  48. }

运行后得到下面的输出结果:

view plaincopy to clipboardprint?
  1. Consumer1 get Message:0
  2. Consumer2 get Message:0
  3. Consumer1 get Message:1
  4. Consumer2 get Message:1
  5. Consumer1 get Message:2
  6. Consumer2 get Message:2
  7. Consumer1 get Message:3
  8. Consumer2 get Message:3
  9. Consumer1 get Message:4
  10. Consumer2 get Message:4
  11. Consumer1 get Message:5
  12. Consumer2 get Message:5
  13. Consumer1 get Message:6
  14. Consumer2 get Message:6
  15. Consumer1 get Message:7
  16. Consumer2 get Message:7
  17. Consumer1 get Message:8
  18. Consumer2 get Message:8
  19. Consumer1 get Message:9
  20. Consumer2 get Message:9

说明每一个消息都会被所有的消费者消费。

深入掌握JMS(五):实战Topic相关推荐

  1. 自定义菜单url不能带_微服务架构【SpringBoot+SpringCloud+VUE】五 || 实战项目微信公众号自定义开发...

    本章主要讲解微信公众号自定义菜单.微信网页开发.模板消息推送等功能的实现: 发福利了,下方关注公众号,就能免费获取项目源码 1.自定义菜单 开发前需要了解以下几点: 1.微信公众号的自定义菜单最多包括 ...

  2. 十五. 实战——mysql建库建表 字符集 和 排序规则

    1. 字符集和排序规则 字符集 当数据库需要适应不同的语言就需要有不同的字符集,如果不指定字符集的话,那么就会使用数据库的默认的字符集,每种字符集都有自己默认的排序规则.mysql默认字符集为utf8 ...

  3. 深入掌握JMS JMSCorrelationID与Selector

    http://wangh8080.blog.163.com/blog/static/197848297201241843917244/ 深入掌握JMS(一):JSM基础 2012-05-18 16:3 ...

  4. [z]JMS简明学习教程

    基础篇 JMS是应用系统或组件之间相互通信的应用程序接口,利用它,我们可以轻易实现在不同JVM之间相互的远程通信.要实现远程通信,RPC同样也能做到,但RPC却不可避免地增加了不同系统之间的耦合度,J ...

  5. (转)JMS简明学习教程

    转:http://www.cnblogs.com/jjj250/archive/2012/08/08/2628552.html 基础篇 JMS是应用系统或组件之间相互通信的应用程序接口,利用它,我们可 ...

  6. 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

    转载:http://blog.csdn.net/jiuqiyuliang/article/details/48758203 第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模 ...

  7. SpringBoot整合RabbitMQ 实现五种消息模型

    目录 SpringBoot中使用RabbitMQ 搭建初始环境 引入依赖 配置配置文件 测试类 注入 rabbitTemplate 消息队列RabbitMQ之五种消息模型 第一种直连模型使用 开发生产 ...

  8. spring和activemq的结合(五)

    转载:http://blog.csdn.net/jiuqiyuliang/article/details/48758203 前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat ...

  9. JMS学习(4):--Spring和ActiveMQ整合的完整实例

    前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PU ...

最新文章

  1. thinkphp-条件判断-范围判断-range标签
  2. Ardino基础教程 5_按键控制
  3. Hadoop 分布式集群搭建步骤
  4. kafka彻底删除topic(cleanup policy)、清除特定topic数据
  5. windowsserver服务器维护,Windows Server服务器日常管理技巧
  6. 删除一个程序Linux,一天一个Linux基础命令删除文件或目录命令rm
  7. 前端学习(1654):前端系列实战课程之js运行代码
  8. ftp连接oracle服务器,使用SSL加密连接FTP - 架建SSL安全加密的FTP服务器(图)_服务器应用_Linux公社-Linux系统门户网站...
  9. android开发 存储权限,Android openFileOutput – 没有创建存储的权限
  10. GitHub使用:GitHub中watch star fork三个按钮干什么用的
  11. 在线笔记存代码_李宏毅《机器学习》完整版笔记发布
  12. SDL_BlitSurface的参数是两个PNG时,如何保护其透明度
  13. Android中Service的一个Demo例子
  14. 【学堂在线数据挖掘:理论方法笔记】第三天(3.27)
  15. iOS -一些常用的方法
  16. 在Javascript中,获取到数字超出长度问题
  17. HP U盘格式化工具
  18. 【黑苹果教程】Airport-miniPCIe 无线网卡驱动
  19. 移动OA,颠覆企业传统助力办公更高效
  20. 手把手教你用深度学习做物体检测(二):数据标注

热门文章

  1. 获取CPU利用率 系统内存和进程内存
  2. qt sizePolicy属性
  3. 查看文件时间及修改(MACN,stat命令,touch命令)
  4. 关于Linux自带的python2.6.6升级到2.7.10版本步骤详解及pip、ipython的安装
  5. 好文推荐:深入分析Java线程池的实现原理
  6. SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
  7. ajax方式表单拦截
  8. jQuery-1.9.1源码分析系列(一)整体架构
  9. z-index优先级总结
  10. supesite 相关 修改