一、添加 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. POJ2230题解

    题目来源 id=2230">http://poj.org/problem?id=2230 题目大意 求无向图从起点1開始从不同方向经过全部边的一条路径.输出随意一条. 题解 把无向图的 ...

  2. 【cl】eclipse配置svn

    查看Eclipse版本号 http://jingyan.baidu.com/article/020278118660e81bcd9ce545.html Window>preferences输入S ...

  3. Linux安装sshfs挂载远程目录到本地及卸载

    挂载远程目录的方式很多,这里把sshfs记录一下备忘.Linux用sshfs挂载远程目录到本地 安装sshfs 在Ubuntu下,只需要使用 $ sudo apt-get install sshfs ...

  4. motion程序的移植和安装【转】

    本文转载自:http://blog.csdn.net/guozhiyuan20095318/article/details/7310486 motion是一个开源的用于移动图像监控的程序.我在做博创杯 ...

  5. 【POJ 3744】 Scout YYF I

    [题目链接] http://poj.org/problem?id=3744 [算法] 概率DP + 矩阵乘法 [代码] #include <algorithm> #include < ...

  6. EOJ 3348 树的顺序存储结构

    前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. 编号 ...

  7. 取消页面按钮的enter按下事件

    <script src="../../@Javascript/jquery-1.8.1.js"></script>       <script lan ...

  8. Android 消息队列机制

    在非UI线程使用Handler进行线程通信时,一般都需要进行3个步骤: 创建Looper Looper.prepar() 创建Handler 启动消息循环Looper.loop() 通过这3步,基本就 ...

  9. JDK1.7源码阅读tools包之------ArrayList,LinkedList,HashMap,TreeMap

    1.HashMap 特点:基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Has ...

  10. mac os x install redis-3.2.9

    下载.解压.重命名并且编译安装Redis~ wget http://download.redis.io/releases/redis-3.2.9.tar.gz ~ tar xzf redis-3.2. ...