一、添加 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. SERVICE_NAME和SERVICE_NAMES和GLOBAL_DBNAME的各自己定义

    tnsnames.ora文件中边SERVICE_NAME的參数值--对于动态注冊和静态注冊.该參数有不同的取值 对于动态注冊: The following pfile/spfile parameter ...

  2. 本地jar安装至maven仓库

    本地jar安装至maven仓库 一般不建议通过这种方式配置依赖,通常做法建议你把本地包安装到maven仓库,命令如下: mvn install:install-file-DgroupId=com.ht ...

  3. Iterator - 迭代器模式

    定义 提供一个方法顺序訪问一个聚合对象中个各个元素,而又不须要暴露该对象的内部结构. 案例 一个聚合对象.如一个列表List.应该提供一种方法来让别人能够訪问它的元素.而又不用暴露内部结构.迭代器模式 ...

  4. leetCode(30):Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  5. oc09--NSString

    // // main.m // 类方法,不可以直接访问对象的属性和方法,类方法中可以直接调用类方法. // NSString基本使用 #import <Foundation/Foundation ...

  6. spark rdd median 中位数求解

    lookup(key) Return the list of values in the RDD for key key. This operation is done efficiently if ...

  7. Spring生态简介

    目录 概述 项目说明 主要项目 社区项目 保留项目 最后总结 概述 做Java开发的人一提起Spring,首先在脑海中浮现出的就是"IoC","AOP",&qu ...

  8. iterator和iterable的区别

    相关博客:  http://blog.csdn.net/lipengcn/article/details/51700153         Java中Iterable和Iterator的辨析 http ...

  9. The name ‘InitialzeComponent’ does not exist in the current context

    在Visual Studio中创建Windows Store项目,在MainPage.xaml.cs中出现错误: The name 'InitialzeComponent' does not exis ...

  10. Hadoop系列之实验环境搭建

    实验环境基本配置 硬件:硬盘单节点50GB,1G内存,单核. 操作系统:CentOS6.4 64bit Hadoop:2.20 64bit(已编译) JDK:jdk1.7 磁盘分区: / 5GB /b ...