ActiveMQ 发送和接收消息
一、添加 jar 包
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.11.2</version>
</dependency>
二、消息传递的两种形式
1、点对点:发送的消息只能被一个消费者接收,第一个消费者接收后,消息没了
2、发布/订阅:消息可以被多个消费者接收 。发完消息,如果没有消费者接收,这消息会自动消失。也就是说,消费者服务必须是启动的状态。( topic 消息在 ActiveMQ 服务端默认不是持久化的,可以通过配置文件配置持久化 )

三、点对点发送消息
/**
* 点到点形式发送消息
* @throws Exception
*/
@Test
public void testQueueProducer() throws Exception{
//1、创建一个连接工厂,需要指定服务的 ip 和端口
String brokerURL = "tcp://192.168.25.129:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
//2、使用工厂对象创建一个 Connection 对象
Connection connection = connectionFactory.createConnection();
//3、开启连接,调用 Connection 对象的 start 方法
connection.start();
//4、创建一个 Session 对象。
//第一个参数:是否开启事务(一般不开启,如果开启事务,第二个参数没意义);
//第二个参数:应答模式。自动应答或者手动应答,一般是自动应答
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5、使用 Session 对象创建一个 Destination 对象。两种形式 queue、topic。
Queue queue = session.createQueue("test-queue");
//6、使用 Session 对象创建一个 Producer 对象
MessageProducer producer = session.createProducer(queue);
//7、创建一个 Message 对象,可以使用 TextMessage。下面两种方式都可以
/*TextMessage textMessage = new ActiveMQTextMessage();
textMessage.setText("hello ActiveMQ");*/
TextMessage textMessage = session.createTextMessage("hello ActiveMQ");
//8、发布消息
producer.send(textMessage);
//9、关闭资源
producer.close();
session.close();
connection.close();
}

四、点对点接收消息
/**
* 点对点接收消息
* @throws Exception
*/
@Test
public void testQueueConsumer() throws Exception{
//1、创建一个 ConnectionFactory 对象连接 MQ 服务器
String brokerURL = "tcp://192.168.25.129:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
//2、创建一个连接对象
Connection connection = connectionFactory.createConnection();
//3、开启连接
connection.start();
//4、使用 Connection 对象 创建一个 Session 对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5、创建一个 Destination 对象。queue 对象
Queue queue = session.createQueue("test-queue");
//6、使用 Session 对象创建一个消费者
MessageConsumer consumer = session.createConsumer(queue);
//7、接收消息
consumer.setMessageListener(new MessageListener() { @Override
public void onMessage(Message message) {
//8、打印结果
TextMessage textMessage = (TextMessage) message; try {
String text = textMessage.getText();
System.out.println(text);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}); //9、等待接收消息。( 接收到消息后才网下面执行。关闭资源 )
System.in.read();
//10、关闭资源
consumer.close();
session.close();
connection.close(); }
五、广播发送消息
/**
* 广播发送消息
* @throws Exception
*/
@Test
public void testTopicProducer() throws Exception{
//1、创建一个连接工厂,需要指定服务的 ip 和端口
String brokerURL = "tcp://192.168.25.129:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
//2、使用工厂对象创建一个 Connection 对象
Connection connection = connectionFactory.createConnection();
//3、开启连接,调用 Connection 对象的 start 方法
connection.start();
//4、创建一个 Session 对象。
//第一个参数:是否开启事务(一般不开启,如果开启事务,第二个参数没意义);
//第二个参数:应答模式。自动应答或者手动应答,一般是自动应答
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5、使用 Session 对象创建一个 Destination 对象。两种形式 queue、topic。
Topic topic = session.createTopic("test-topic");
//6、使用 Session 对象创建一个 Producer 对象
MessageProducer producer = session.createProducer(topic);
//7、创建一个 Message 对象,可以使用 TextMessage。下面两种方式都可以
/*TextMessage textMessage = new ActiveMQTextMessage();
textMessage.setText("hello ActiveMQ");*/
TextMessage textMessage = session.createTextMessage("hello ActiveMQ");
//8、发布消息
producer.send(textMessage);
//9、关闭资源
producer.close();
session.close();
connection.close();
}

六、广播接收消息
/**
* 广播接收消息
* @throws Exception
*/
@Test
public void testTopicConsumer() throws Exception{
//1、创建一个 ConnectionFactory 对象连接 MQ 服务器
String brokerURL = "tcp://192.168.25.129:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
//2、创建一个连接对象
Connection connection = connectionFactory.createConnection();
//3、开启连接
connection.start();
//4、使用 Connection 对象 创建一个 Session 对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5、创建一个 Destination 对象。Topic 对象
Topic topic = session.createTopic("test-topic");
//6、使用 Session 对象创建一个消费者
MessageConsumer consumer = session.createConsumer(topic);
//7、接收消息
consumer.setMessageListener(new MessageListener() { @Override
public void onMessage(Message message) {
//8、打印结果
TextMessage textMessage = (TextMessage) message; try {
String text = textMessage.getText();
System.out.println(text);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
});
System.out.println("topic消费者");
//9、等待接收消息。( 接收到消息后才网下面执行。关闭资源 )
System.in.read();
//10、关闭资源
consumer.close();
session.close();
connection.close();
}
ActiveMQ 发送和接收消息的更多相关文章
- ActiveMQ实例1--简单的发送和接收消息
一.环境准备 1,官网http://activemq.apache.org/下载最新版本的ActiveMQ,并解压 2,打开对应的目录,在Mac环境下,一般可以运行命令: cd /Users/***/ ...
- ROS_Kinetic_26 使用rosserial_windows实现windows与ROS master发送与接收消息
使用rosserial_windows实现windows与ROS master发送与接收消息(适用版本hydro,indigo,jade,kinetic) 官方wiki地址汇总请参考:http://b ...
- rabbitMQ学习笔记(二) 简单的发送与接收消息 HelloWorld
首先要下载rabbitmq的javaClient库,然后加入到项目中,下载地址为:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1. ...
- 解决Springboot整合ActiveMQ发送和接收topic消息的问题
环境搭建 1.创建maven项目(jar) 2.pom.xml添加依赖 <parent> <groupId>org.springframework.boot</group ...
- 关于Java客户端连接虚拟机中的Kafka时,无法发送、接收消息的问题
kafka通过控制台模拟消息发送和消息接收正常,但是通过javaAPI操作生产者发送消息不成功 消费者接收不到数据解决方案? 1.问题排查 (1)首先通过在服务器上使用命令行来模拟生产.消费数据,发现 ...
- 生产/消费 发送和接收消息---基于kombu和redis交互
from kombu import Connection, Exchange, Queue media_exchange = Exchange('media', 'direct', durable=T ...
- React Native之DeviceEventEmitter发送和接收消息完成事件处理
今天在Demo这样一个项目的时候,首先遇到的第一个问题就是,每次通过dialog选择[本周.本月.本天]时,伴随着内容重新渲染的时候,tab navigator每次都重新创建和渲染,造成性能浪费和用户 ...
- C# WinForm UDP 发送和接收消息
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; ...
- activemq安装与简单消息发送接收实例
安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...
随机推荐
- 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决
微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...
- [iOS]UITableViewController完毕收回键盘操作
UITableViewController 本身可以实现键盘适配(cell中控件焦点会移动到键盘上方 在做键盘收回的时候思考过例如以下方案 1.tableview加入点击事件 结果:点击事件和tabl ...
- C语言数组和函数实例练习(一)
C语言的数组和函数部分的知识,在语法上和Java语法是有所相似的,这里只通过实例总结一些自己感觉需要理解的部分知识. 1.数组 数组中的元素具有相同的数据类型:数组一旦创建,不能被改变:数组中元素在内 ...
- 国外物联网平台初探(三) ——IBM Watson IoT
平台定位 提供全面管理的云托管服务,旨在简化并从 IoT 设备中获得价值. Watson IoT Platform 提供对 IoT 设备和数据的强大应用程序访问,可快速编写分析应用程序.可视化仪表板和 ...
- poj--1664--放苹果(递归好体)
放苹果 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Submit Status De ...
- 第19章 Redis的一些常用技术
19.1 Redis的基础事务 图19-1 Redis命令执行事务的过程 19-1:在Spring中使用Redis ...
- 根据日期获取,x岁x月x天
c#: DateTime startDate = new DateTime(); DateTime endDate = new DateTime(); ; ; ; if (endDate.Month& ...
- python笔记:字符编码
ASCII编码 知识点:计算机中最小的单位是bit,bit就咱们常说一位二进制,一位二进制要么是0 要么是 1.但是bit这个单位太小了,我们用字节(byte)来表示.换算的规则如下: 8b = 1B ...
- 爬虫—分析Ajax爬取今日头条图片
以今日头条为例分析Ajax请求抓取网页数据.本次抓取今日头条的街拍关键字对应的图片,并保存到本地 一,分析 打开今日头条主页,在搜索框中输入街拍二字,打开开发者工具,发现浏览器显示的数据不在其源码里面 ...
- Qt5.9 WebEngine 概述
Qt WebEngine模块提供了一个web浏览器, 在不使用本地浏览器的情况下, 它可以很容易地把Web内容嵌入到Qt应用程序中. Qt WebEngine为渲染HTML, XHTML和SVG文档, ...