【ActiveMQ】- 发布/订阅模式
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】- 发布/订阅模式的更多相关文章
- ActiveMQ发布订阅模式
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ActiveMQ发布订阅模式(转)
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ActiveMQ发布订阅模式 转发 https://www.cnblogs.com/madyina/p/4127144.html
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ACtiveMQ中间件-发布订阅模式
前言:ActiveMQ学习心得 1.MQ是什么 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信, ...
- ActiveMQ (二)—发布订阅模式
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ActiveMQ发布-订阅消息模式(同点对点模式的区别)
点对点与发布订阅最初是由JMS定义的.这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅) 点对点: 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费 ...
- SpringBoot2.0之整合ActiveMQ(发布订阅模式)
发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...
- ActiveMQ入门系列三:发布/订阅模式
在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...
- ActiveMQ的p2p模式与发布订阅模式
1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题 传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求 ...
- redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
随机推荐
- 关于matlab向文件写入数据的方法——留着备用
MATLAB数据采集的时候,往往需要把得到的数据保存下来. fid = fopen(文件名,‘打开方式’): 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功.打开方式有如下选 ...
- Unity扩展编辑器三
Scene视图是编辑游戏模型的地方,其实它还可以进行编辑,如下图所示,我给Scene视图做了简单的编辑 Scene视图的扩展是基于对象的,意思是你必须在Hierarchy视图中选择一个对象才行,Hie ...
- Siki_Unity_3-7_AssetBundle从入门到掌握
Unity 3-7 AssetBundle从入门到掌握 任务1&2&3:课程介绍 AssetBundle -- 用于资源的更新 为了之后的xLua (Lua热更新的框架)打下基础 任务 ...
- NO 18---- webpack 4.x 使用遇到的问题以及开发配置
最近在项目中用webpack的过程中老是出现问题,很是纳闷,按理说一直这样使用没有问题啊,经过我研究后发现,是因为在webpack更新到4.x之后,操作方式与之前相比变化很大.而我们使用npm默认安装 ...
- 从零系列--开发npm包(二)
一.利用shell简化组合命令 set -e CVERSION=$(git tag | ) echo "current version:$CVERSION" echo " ...
- 高可用OpenStack(Queen版)集群-1. 集群环境
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- 【探路者】Beta发布用户使用报告
用户数量:18 一.用户列表及评论. 用户序号 用户来源 用户下载软件途径 用户姓名 用户描述(信息) 使用次数 用户评价 1 张恩聚 QQ发送可运行jar包 周楠 吉林大学在读研究生 5 ...
- 2017-2018-2学期 20172324《Java程序设计》第六周学习总结
20172324<Java程序设计>第六周学习总结 教材学习内容总结 如何创建数组以及int[] X与int X[]的区别(编译时是没有差别的,只是前者与其他类型的声明方式有一致性) 每一 ...
- Alpha版会议总结
目前的进度: 实现了文字备忘的录入: 实现了提醒功能: 实现了可视化界面: 语音录入功能还没有完成: 界面相当粗糙: 遇到的问题: 语音录入按钮按下后没有反应,目前没有解决思路和方法. 原本的解屏功能 ...
- 记:ASP.NET Core开发时部署到IIS上出现HTTP Error 502.5 - Process Failure的解决方案
HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to st ...