publish/subscribe
  
  特点:A发送的消息可以被所有监听A的对象的接收,就好比学校的广播,所有的学生都可以收听校园广播信息。
  
  消息生产者:
  
  package com.zhiwei.advanced.mq.activemq.sp;
  
  import javax.jms.Connection;
  
  import javax.jms.ConnectionFactory;
  
  import javax.jms.Destination;
  
  import javax.jms.MessageProducer;
  
  import javax.jms.Session;
  
  import javax.jms.TextMessage;
  
  import org.apache.activemq.ActiveMQConnection;
  
  import org.apache.activemq.ActiveMQConnectionFactory;
  
  /**
  
  * 发布/订阅消息模型 测试顺序:先订阅才能收到消息
  
  */
  
  public class JMSProducer {
  
  private final static String user = ActiveMQConnection.DEFAULT_USER; // 默认用户名
  
  private final static String password = ActiveMQConnection.DEFAULT_PASSWORD; // 默认密码
  
  private final static String brokeURL = ActiveMQConnection.DEFAULT_BROKER_URL; // 链接地址
  
  public static void main(String[] args) throws Exception {
  
   // 连接工厂
  
  ConnectionFactory factory = new ActiveMQConnectionFactory(JMSProducer.user, JMSProducer.password,JMSProducer.brokeURL);
  
  // 创建连接
  
  Connection connection = factory.createConnection();
  
  // 启动连接
  
  connection.start();
  
  // 接受或发送消息的线程
  
  Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
  
  Destination destination = session.createTopic("FirstTopic"); // 创建消息主题:Destination子类:Queue/Topic
  
  MessageProducer messageProducer = session.createProducer(destination); // 创建消息生产者
  
  // 发送文本消息
  
  for (int i = 0; i < 10; i++) {
  
  TextMessage message = session.createTextMessage("JMS Provider发送消息:" + i);
  
  System.out.println("JMS Provider发送消息:" + i);
  
  messageProducer.send(message);
  
  }
  
  // 启用事务时session需要提交
  
  session.commit();
  
  session.close();
  
  connection.close();
  
  }
  
  }
  
  消息消费者1:
  
  package com.zhiwei.advanced.mq.activemq.sp;
  
  import javax.jms.Connection;
  
  import javax.jms.ConnectionFactory;
  
  import javax.jms.Destination;
  
  import javax.jms.MessageConsumer;
  
  import javax.jms.Session;
  
  import org.apache.activemq.ActiveMQConnection;
  
  import org.apache.activemq.ActiveMQConnectionFactory;
  
  /**
  
  * 发布/订阅消息模型
  
  *
  
  * 特別注意:发布订阅消息模型必须先客户端监听,然后主题发送消息
  
  */
  
  public class JMSConsumer01{
  
  private final static String user = ActiveMQConnection.DEFAULT_USER; // 默认用户名
  
  private final static String password www.yigouyule2.cn/= ActiveMQConnection.DEFAULT_PASSWORD; // 默认密码
  
  private final static String brokeURL = ActiveMQConnection.DEFAULT_BROKER_URL; // 链接地址
  
  public static void main(String[] args) throws Exception {
  
  ConnectionFactory factory www.zhenghongyule.cn= new ActiveMQConnectionFactory(JMSConsumer01.user, JMSConsumer01.password,JMSConsumer01.brokeURL); // 链接工厂
  
  Connection connection = factory.createConnection(); // 连接
  
  connection.start(); // 启动连接
  
  Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 接受或发送消息的线程:消费不需事务
  
  Destination destination =www. jiahuayulpt.com session.createTopic("FirstTopic"); // 创建连接消息主题:Destination子类:Queue/Topic
  
  MessageConsumer messageConsumer = session.createConsumer(destination); // 创建消息生产者
  
  messageConsumer.setMessageListener(new JMSListener()); //注册消息监听 :阻塞监听
  
  }
  
  }
  
  消息消费者2:
  
  package com.zhiwei.advanced.mq.activemq.sp;
  
  import javax.jms.Connection;
  
  import javax.jms.ConnectionFactory;
  
  import javax.jms.www.zhongyiyuL.cn Destination;
  
  import javax.jms.MessageConsumer;
  
  import javax.jms.Session;
  
  import org.apache.www.myzx157.com activemq.ActiveMQConnection;
  
  import org.apache.www.mytxyl1.com activemq.ActiveMQConnectionFactory;
  
  /**
  
  * 发布/订阅消息模型
  
  */
  
  public class JMSConsumer02{
  
  private final static String user = ActiveMQConnection.DEFAULT_USER; // 默认用户名
  
  private final static String password = ActiveMQConnection.DEFAULT_PASSWORD; // 默认密码
  
  private final static String brokeURL = ActiveMQConnection.DEFAULT_BROKER_URL; // 链接地址
  
  public static void main(String[] args) throws Exception {
  
  ConnectionFactory factory = new ActiveMQConnectionFactory(JMSConsumer02.user, JMSConsumer02.password,JMSConsumer02.brokeURL); // 链接工厂
  
  Connection connection = factory.createConnection(); // 连接
  
  connection.start(); // 启动连接
  
  Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 接受或发送消息的线程:消费不需事务
  
  Destination destination = session.createTopic("FirstTopic"); // 创建连接消息主题:Destination子类:Queue/Topic
  
  MessageConsumer messageConsumer = session.createConsumer(destination); // 创建消息生产者
  
  messageConsumer.setMessageListener(new JMSListener()); //注册消息监听 :阻塞监听
  
  }
  
  }
  
  消息队列监听器:
  
  package com.zhiwei.advanced.mq.activemq.sp;
  
  import javax.jms.JMSException;
  
  import javax.jms.Message;
  
  import javax.jms.MessageListener;
  
  import javax.jms.TextMessage;
  
  public class JMSListener implements MessageListener{
  
  @Override
  
  public void onMessage(Message message) {
  
  if(message instanceof TextMessage){
  
  try {
  
  System.out.println(((TextMessage) message).getText());
  
  } catch (JMSException e) {
  
  e.printStackTrace();
  
  }
  
  }

【ActiveMQ】- 发布/订阅模式的更多相关文章

  1. ActiveMQ发布订阅模式

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  2. ActiveMQ发布订阅模式(转)

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  3. ActiveMQ发布订阅模式 转发 https://www.cnblogs.com/madyina/p/4127144.html

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  4. ACtiveMQ中间件-发布订阅模式

    前言:ActiveMQ学习心得 1.MQ是什么 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信, ...

  5. ActiveMQ (二)—发布订阅模式

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  6. ActiveMQ发布-订阅消息模式(同点对点模式的区别)

    点对点与发布订阅最初是由JMS定义的.这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅) 点对点: 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费 ...

  7. SpringBoot2.0之整合ActiveMQ(发布订阅模式)

    发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...

  8. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  9. ActiveMQ的p2p模式与发布订阅模式

    1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题        传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求          ...

  10. redis实现消息队列&发布/订阅模式使用

    在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录.   Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...

随机推荐

  1. java练习(一)数组、集合的运用

    有这么一个有趣的问题,问:有这么一个不重复的自然数数组,自然数长度为N,而数组长度为N-2,依次随机把自然数放进数组中,请找出2个没有被放进去的自然数.例如:这个自然数数组是[0, 1, 2, 3,  ...

  2. 算法设计:UNION-FIND算法实现

    在上周的算法设计课程中,我们学习了UNION-FIND算法,该算法用来对不相交集进行查询与合并操作,但任何优秀的算法都必须要用实际的代码来进行实现,接下来我们就来看看具体的代码实现 1. 不相关集数据 ...

  3. InnoDB表优化

    InnoDB表存储优化 适时的使用 OPTIMIZE TABLE 语句来重组表,压缩浪费的表空间.这是在其它优化技术不可用的情况下最直接的方法. OPTIMIZE TABLE 语句通过拷贝表数据并重建 ...

  4. CHAPTER 38 Reading ‘the Book of Life’ The Human Genome Project 第38章 阅读生命之书 人体基因组计划

    CHAPTER 38 Reading ‘the Book of Life’ The Human Genome Project 第38章 阅读生命之书 人体基因组计划 Humans have about ...

  5. 如何批量删除QQ浏览器指定历史记录和导出指定的历史记录

    QQ浏览器的历史记录只有清空历史记录和删除选中项两个功能.有时我不想删除所有的历史记录,只是想删除指定的历史记录保留对自己有用的历史记录,方便自己以后查找.但是删除选中项功能只能一项一项的选择,才能批 ...

  6. VMware vCenter Converter迁移Linux系统虚拟机

    (一)简介VMware vCenter Converter Standalone,是一种用于将虚拟机和物理机转换为 VMware 虚拟机的可扩展解决方案.此外,还可以在 vCenter Server ...

  7. Java实验五(客户端)

    一.    实验内容 1.    运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.    利用加解密代码包,编译运行代码,客户端加密,服务器解密: 3.    客户端加密明文后将密文通过 ...

  8. WebGL七点二

    与上一节相比这一节相当做了些整合和整理,目的是提高了读写效率和减少代码量,就是做了优化.这里我们只需要在顶点着色器中定义一个用于从js传递参数的变量u_MvcMatrix一看就知道是uniform变量 ...

  9. mabatis报错 Result Maps collection already contains value for gamedataserver.dao.one.ChargeRecordMapper.BaseResultMap

    1.解决这种报错看看英文"already ",也就是已经存在,其实是因为存在了两个id相同的返回,以下可以看看,根据这种例子看看自己项目是不是这种问题

  10. Good Time 冲刺 五

    一.今日完成任务情况及遇到的问题 第五天 日期:2018.6.18 王怡镔:今天继续在学习中完善编写页面,对之前的页面进行部分改进. 于鑫宇:修改完善布局,复习. 胡雅馨:今天继续改进页面,努力解决时 ...