一、添加 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 发送和接收消息的更多相关文章

  1. ActiveMQ实例1--简单的发送和接收消息

    一.环境准备 1,官网http://activemq.apache.org/下载最新版本的ActiveMQ,并解压 2,打开对应的目录,在Mac环境下,一般可以运行命令: cd /Users/***/ ...

  2. ROS_Kinetic_26 使用rosserial_windows实现windows与ROS master发送与接收消息

    使用rosserial_windows实现windows与ROS master发送与接收消息(适用版本hydro,indigo,jade,kinetic) 官方wiki地址汇总请参考:http://b ...

  3. rabbitMQ学习笔记(二) 简单的发送与接收消息 HelloWorld

    首先要下载rabbitmq的javaClient库,然后加入到项目中,下载地址为:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1. ...

  4. 解决Springboot整合ActiveMQ发送和接收topic消息的问题

    环境搭建 1.创建maven项目(jar) 2.pom.xml添加依赖 <parent> <groupId>org.springframework.boot</group ...

  5. 关于Java客户端连接虚拟机中的Kafka时,无法发送、接收消息的问题

    kafka通过控制台模拟消息发送和消息接收正常,但是通过javaAPI操作生产者发送消息不成功 消费者接收不到数据解决方案? 1.问题排查 (1)首先通过在服务器上使用命令行来模拟生产.消费数据,发现 ...

  6. 生产/消费 发送和接收消息---基于kombu和redis交互

    from kombu import Connection, Exchange, Queue media_exchange = Exchange('media', 'direct', durable=T ...

  7. React Native之DeviceEventEmitter发送和接收消息完成事件处理

    今天在Demo这样一个项目的时候,首先遇到的第一个问题就是,每次通过dialog选择[本周.本月.本天]时,伴随着内容重新渲染的时候,tab navigator每次都重新创建和渲染,造成性能浪费和用户 ...

  8. C# WinForm UDP 发送和接收消息

    using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; ...

  9. activemq安装与简单消息发送接收实例

    安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...

随机推荐

  1. 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决

    微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...

  2. [iOS]UITableViewController完毕收回键盘操作

    UITableViewController 本身可以实现键盘适配(cell中控件焦点会移动到键盘上方 在做键盘收回的时候思考过例如以下方案 1.tableview加入点击事件 结果:点击事件和tabl ...

  3. C语言数组和函数实例练习(一)

    C语言的数组和函数部分的知识,在语法上和Java语法是有所相似的,这里只通过实例总结一些自己感觉需要理解的部分知识. 1.数组 数组中的元素具有相同的数据类型:数组一旦创建,不能被改变:数组中元素在内 ...

  4. 国外物联网平台初探(三) ——IBM Watson IoT

    平台定位 提供全面管理的云托管服务,旨在简化并从 IoT 设备中获得价值. Watson IoT Platform 提供对 IoT 设备和数据的强大应用程序访问,可快速编写分析应用程序.可视化仪表板和 ...

  5. poj--1664--放苹果(递归好体)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %I64d & %I64u Submit Status De ...

  6. 第19章 Redis的一些常用技术

    19.1 Redis的基础事务                       图19-1 Redis命令执行事务的过程                      19-1:在Spring中使用Redis ...

  7. 根据日期获取,x岁x月x天

    c#: DateTime startDate = new DateTime(); DateTime endDate = new DateTime(); ; ; ; if (endDate.Month& ...

  8. python笔记:字符编码

    ASCII编码 知识点:计算机中最小的单位是bit,bit就咱们常说一位二进制,一位二进制要么是0 要么是 1.但是bit这个单位太小了,我们用字节(byte)来表示.换算的规则如下: 8b = 1B ...

  9. 爬虫—分析Ajax爬取今日头条图片

    以今日头条为例分析Ajax请求抓取网页数据.本次抓取今日头条的街拍关键字对应的图片,并保存到本地 一,分析 打开今日头条主页,在搜索框中输入街拍二字,打开开发者工具,发现浏览器显示的数据不在其源码里面 ...

  10. Qt5.9 WebEngine 概述

    Qt WebEngine模块提供了一个web浏览器, 在不使用本地浏览器的情况下, 它可以很容易地把Web内容嵌入到Qt应用程序中. Qt WebEngine为渲染HTML, XHTML和SVG文档, ...