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. (转)CentOS7系统信息及运行情况查看

    原文链接:https://blog.csdn.net/qq_42196196/article/details/85063911 系统信息 CPU信息 内存信息 显卡信息 硬盘信息 网络信息 用户信息 ...

  2. OpenSSH技术详解

    一.什么是Openssh  OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现.SSH协议族可以用来进行远程控制, 或在计算机之间传送文件.而实现此功能的传统方式,如teln ...

  3. mysql 从 frm 文件恢复 table 表结构的3种方法

    mysql 正常运行的时候,查看 table 的结构并不是困难的事. 但是有时 mysql 发生故障,这种方法便不再可行. 当遇到故障,通常使用新的 mysql 实例来恢复当前的数据. 建表是非常重要 ...

  4. day23 正则,re模块

    一. 简谈正则表达式 元字符 . 除了换行符外任意字符. \w 数字.字母.下划线 \s 空白符 \b 单词的末尾 \d 数字 \n 匹配换行符 \t 匹配制表符 \W 除了数字. 字母 下划线 \D ...

  5. 为centos虚拟机配置固定ip

    在virtual上安装centos虚拟机以后,发现虚拟机没有ip,无法联网 将虚拟机的网络适配器改为桥接模式,桥接到物理机的无线网卡 为虚拟机配置固定IP(vi /etc/sysconfig/netw ...

  6. kali vmtools 不能复制粘贴解决方法(绝对实用)

    朋友问起怎么vm kali 2019怎么不能复制了,而且网上的方法大多不适合.我就在这儿记录一笔吧,方便大家. 之前发现最新kali复制粘贴不能用,后来发现一个奇妙的套路,不是共享文件夹.只需要把文件 ...

  7. Python基础_可迭代的/迭代器/生成器

    介绍 可迭代的:内部实现了__iter__方法 迭代器:内部实现了__iter__,__next__方法 生成器:yield,yield from 使用 __iter__() __next__() _ ...

  8. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

  9. 阿里nas挂载错误

    报错如下,解决:yum install nfs-utils 即可 mount: wrong fs type, bad option, bad superblock on 12080482f3-qra4 ...

  10. Daily Scrum4 11.6

    昨天的任务按时完成了,但是通过不到两周的时间,我们的工作依旧停留在修改上届学长代码中.今天上课和老师提出了这样的问题,助教在TFS上重新加载了10级学长的代码. 从上届学长代码那里我们发现,他们没有实 ...