前言:ActiveMQ学习心得
1.MQ是什么
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。其中较为成熟的MQ产品有IBM WEBSPHERE MQ、Apache ActiveMQ等等。
1.1.ActiveMQ的概述
ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。
1.3.ActiveMQ的实现原理
如图所示:当客户端A和客户端B通信,客户端A发送消息到队列或主题中,然后等待客户端B接收消息。当客户端B接收消息并且确认消息后,消息才会
从队列中删除。
2.ActiveMQ的下载
2.1.下载路径
官方网站下载:http://activemq.apache.org/
2.2ActiveMQ的运行
我下载的是active5.9版本的进入ActiveMQ的解压包bin目录开始启动服务
2.2.ActiveMQ发布订阅模式代码示例
首先添加jar包为
开始编写代码既然是消息中间件就是来处理消息的,那么处理消息就有发送方和接收方,在发布订阅模式下面需先运行消息接收方在运行发送方可接收到消息
发送方代码
/**
* @摘要 测试发送单条数据的类
*/
public class ZMQOneSendTest{
public static void main(String[] args) throws Exception {
// 4.开始建立连接时间
Long nStartTime = System.currentTimeMillis();
// 5.建立连接工厂
org.apache.activemq.ActiveMQConnectionFactory nFactory = new org.apache.activemq.ActiveMQConnectionFactory("tcp://localhost:61616");
// 6.用工厂建立Connection连接
javax.jms.TopicConnection nConnection = nFactory.createTopicConnection();
// 7.创建会话Session,不启动事务,签收模式为自动确认模式
javax.jms.TopicSession nSession = nConnection.createTopicSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);
// 8.创建主题
javax.jms.Topic nTopic = nSession.createTopic("199");
// 9.创建发布者
javax.jms.TopicPublisher nPublihser = nSession.createPublisher(nTopic);
// 10.设置持久化
nPublihser.setDeliveryMode(javax.jms.DeliveryMode.PERSISTENT);
// 11.启动连接
nConnection.start();
// 12.查询开始时间
Long nStartSelectTime = System.currentTimeMillis();
// 14.查询结束时间
Long nEndSelectTime = System.currentTimeMillis();
// 15.创建消息
javax.jms.TextMessage nMessage = nSession.createTextMessage();
nMessage.setText("我是发送的数据");
// 16.发送开始时间
Long nStartSendTime = System.currentTimeMillis();
// 17.发布者发布消息
nPublihser.publish(nMessage);
// 18.发布结束时间
Long nEndSendTime = System.currentTimeMillis();
// 19.打印消息
System.out.println("已发送消息 "+nMessage);
// 关闭发布者、会话、连接
nPublihser.close();
nSession.close();
nConnection.close();
// 20.计算时间
System.out.println("查询消息时间 "+(nEndSelectTime-nStartSelectTime));
System.out.println("发送消息时间"+(nEndSendTime-nStartSendTime));
System.out.println("总时间"+(nEndSendTime-nStartTime));
}
}
接收方代码
import javax.jms.JMSException;
public class ZMQReadTest {
public static void main(String[] args) throws JMSException {
// 1.建立连接工厂
org.apache.activemq.ActiveMQConnectionFactory nFactory = new org.apache.activemq.ActiveMQConnectionFactory("tcp://localhost:61616");
// 2.用工厂建立Connection连接
javax.jms.TopicConnection nTopicConnection = nFactory.createTopicConnection();
// 3.为客户端设置一个唯一ID
nTopicConnection.setClientID("5");
// 4.创建会话Session,不启动事务,签收模式为自动确认模式
javax.jms.TopicSession nSession = nTopicConnection.createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
// 5.创建主题
javax.jms.Topic nTopic = nSession.createTopic("199");
// 6.创建订阅者
javax.jms.TopicSubscriber nTopicSubscriber = nSession.createDurableSubscriber(nTopic, "min");
// 6.1.为消费者添加消息监听器,onMessage方法接收消息
nTopicSubscriber.setMessageListener(new javax.jms.MessageListener() {
public void onMessage(javax.jms.Message nMessage) {
try {
if (nMessage instanceof javax.jms.TextMessage) {
String nTextMessage = ((javax.jms.TextMessage) nMessage).getText();
System.out.println("收到的消息:" + nTextMessage);
}
} catch (javax.jms.JMSException e) {
e.printStackTrace();
}
}
});
// 7.开启连接
nTopicConnection.start();
}
}
测试消息的发送和接收是否成功时需要先运行消费者(消息的接收者)再运行生产者(消息发送者)当显示如下消息接收方和发送方打印消息如下即可。
好的给大家写好一个发布订阅案例了不懂的可以问我哈!!!
- 大小: 19.1 KB
- 大小: 25.8 KB
- 大小: 5.7 KB
- 大小: 28.2 KB
- 大小: 27.6 KB
分享到:
相关推荐
本示例“ActiveMQ-Topic订阅发布模式Demo”主要关注的是发布/订阅模式,这是一种一对多的消息传递方式。在发布/订阅模式中,生产者(Publisher)发送消息到一个主题(Topic),而多个消费者(Subscriber)可以订阅这...
总之,ActiveMQ-CPP库3.9.5版本为C++开发者提供了强大的消息传递功能,无论是简单的点对点通信还是复杂的发布/订阅模式,都能灵活应对。通过熟悉和掌握其API及特性,开发者可以构建高效、可靠的分布式系统,实现数据...
1. **消息队列**:ActiveMQ支持多种消息模式,如点对点(Queue)和发布/订阅(Topic)。消息队列确保消息的可靠传输,即使在发送方和接收方之间发生故障时也能保持数据的完整性。 2. **JMS兼容性**:ActiveMQ完全...
- **主题(Topics)**:支持发布/订阅模式,消息可以被多个消费者接收。 - **持久化**:ActiveMQ支持将消息持久化到磁盘,即使在服务器重启后也能恢复未处理的消息。 - **网络连接**:支持跨多个节点的集群配置,...
ActiveMQ的核心功能是作为消息代理,它允许应用程序通过发布/订阅和点对点模式进行异步通信。这种通信方式提高了系统的可扩展性和可靠性,因为消息可以在生产者和消费者之间独立传输,即使它们在不同的时间运行或...
ActiveMQ作为JMS实现,支持点对点(Queue)和发布/订阅(Topic)两种模式。 2. **消息模型**:ActiveMQ支持多种消息模型,包括持久化消息、非持久化消息、事务消息等。持久化消息即使在服务器重启后也能保持,而非...
4. **消息模式**:ActiveMQ支持多种消息模式,如点对点(Queue)、发布/订阅(Topic)、请求/响应(Request/Reply)等。这些模式适应了不同场景下的通信需求,如可靠的单次传递、广播或者分布式计算。 5. **高级...
发布/订阅模式下,消息被多个订阅者共享。 3. **协议支持**:除了JMS,ActiveMQ还支持STOMP、AMQP、OpenWire、MQTT等多种消息协议,以适应不同环境和需求。 4. **持久化机制**:ActiveMQ提供了多种持久化策略,如...
2. **主题(Topic)与队列(Queue)**: 主题用于发布/订阅模式,多个订阅者可以接收同一条消息;队列则遵循先进先出(FIFO)原则,每个消息仅被一个消费者消费。 3. **持久化(Persistence)**: ActiveMQ支持消息...
- **发布/订阅(Topic)**:消息被多个订阅者接收,适合广播消息。 **协议支持** 除了JMS,ActiveMQ还支持多种协议,如AMQP(Advanced Message Queuing Protocol)、STOMP(Simple Text Oriented Messaging ...
MQTT是一种轻量级的发布/订阅消息协议,设计用于物联网(IoT)设备和低带宽、高延迟或不可靠网络环境中的通信。由于其简单性和资源效率,它被广泛应用于移动设备、嵌入式系统以及远程传感器等场景。 Apache ActiveMQ...
它的核心功能包括发布/订阅和点对点的消息模式,以及事务处理和持久化机制。 **2. 版本5.15.3特性** - **稳定性与性能优化**:此版本在前一版本的基础上进行了大量优化,提高了系统的稳定性和处理消息的性能。 - **...
ActiveMQ作为JMS实现,支持点对点(Queue)和发布/订阅(Topic)两种模式。 **3. 安装过程** 下载“apache-activemq-5.3.1-bin.tar.gz”后,你需要解压到一个合适的目录。这可以通过命令行工具如`tar`完成: ```...
而在发布/订阅模式下,消息可以被多个订阅者消费。这些模型适用于不同的应用场景。 消息传输的安全性是另一个重要方面。ActiveMQ可以通过SSL/TLS加密连接,以及使用JAAS(Java Authentication and Authorization ...
- **主题与队列**:支持发布/订阅模式的主题和点对点模式的队列,满足不同应用场景的需求。 - **安全性**:通过JAAS(Java Authentication and Authorization Service)实现用户身份验证和权限控制。 - **消息优先级...
Apache ActiveMQ是开源社区中最流行的消息中间件之一,它基于Java消息服务(JMS)标准,提供高效、可靠的异步通信解决方案。ActiveMQ在企业级应用中广泛应用,因为它支持多种协议,如OpenWire、STOMP、AMQP、MQTT、...
"jms-1.1.jar"包含了JMS 1.1规范的实现,这是JMS的第二个主要版本,提供了发布/订阅和点对点两种消息传递模式。 4. **使用场景**: activemq-all-5.15.2.jar和jms-1.1.jar通常在以下场景中使用:大型分布式系统中的...
- **队列与主题**:ActiveMQ支持两种消息模式——点对点(Queue)和发布/订阅(Topic)。队列保证消息的顺序传递,而主题则允许广播式的消息分发。 2. **ActiveMQ功能**: - **高可用性**:通过集群和复制策略,...
通过Topic和Queue,可以实现发布/订阅和点对点的消息模式。 总的来说,这个压缩包为C#开发者提供了一套完整的工具,以便他们在.NET环境中无缝地利用Apache ActiveMQ的强大功能,进行高效、灵活的消息通信。对于需要...
7. **消息类型**:ActiveMQ支持多种消息类型,包括点对点(Queue)和发布/订阅(Topic)模式。Queue用于一对一通信,而Topic用于一对多广播式通信。 8. **高可用性和集群**:ActiveMQ支持集群和故障转移,可以创建...