ActiceMQ详解 (8)

点对点模型是基于队列的,生产者发消息到队列,消费者从队列接收消息,队列的存在使得消息的异步传输成为可能,和我们平时给朋友发送短信类似。

如果在Session关闭时有部分消息己被收到但还没有被签收(acknowledged),那当消费者下次连接到相同的队列时,这些消息还会被再次接收。

队列可以长久地保存消息直到消费者收到消息,消费者不需要因为担心消息会丢失而时刻和队列保持激活的连接状态,充分体现了异步传输模式的优势。

3.7 JMS的发布订阅总结

JMS的发布订阅总结

JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息,这些节点被称作Topic。

主题可以被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscribe)从主题订阅消息。

主题使得消息订阅者和消息发布者保持互相独立,不需要解除即可保证消息的传送。

非持久订阅

非持久订阅只有当客户端处于激活状态,也就是和MQ保持连接状态才能收发到某个主题的消息。

如果消费者处于离线状态,生产者发送的主题消息将会丢失作废,消费者永远不会收到。一句话:先订阅注册才能接受到发布,只给订阅者发布消息。

持久订阅

客户端首先向MQ注册一个自己的身份ID识别号,当这个客户端处于离线时,生产者会为这个ID保存所有发送到主题的消息,当客户再次连接到MQ的时候,会根据消费者的ID得到所有当自己处于离线时发送到主题的消息。

当非持久订阅状态下,不能恢复或重新派送一个未签收的消息。持久订阅才能恢复或重新派送一个未签收的消息。

非持久和持久化订阅如何选择

当所有的消息必须被接收则用持久化订阅,当消息丢失能够被容忍则用非持久订阅。

4. ActiveMQ的Broker 4.1 broker是什么

相当于 一个ActiveMQ服务器实例。说白了Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java代码中,以便随时用随时启动,在用的时候再去启动这样能节省了资源,也保证了可用性。这种方式,我们实际开发中很少采用,因为他缺少太多了东西,如:日志,数据存储等等。

4.2 启动broker时指定配置文件

启动broker时指定配置文件,可以帮助我们在一台服务器上启动多个broker。实际工作中一般一台服务器只启动一个broker。

image-20210116022208482

4.3 嵌入式的broker启动

用ActiveMQ Broker作为独立的消息服务器来构建Java应用。

ActiveMQ也支持在vm中通信基于嵌入的broker,能够无缝的集成其他java应用。

下面演示如何启动嵌入式的broker

pom.xml添加一个依赖

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.1</version> </dependency>

嵌入式broker的启动类

import org.apache.activemq.broker.BrokerService; public class EmbedBroker { public static void main(String[] args) throws Exception { //ActiveMQ也支持在vm中通信基于嵌入的broker BrokerService brokerService = new BrokerService(); brokerService.setPopulateJMSXUserID(true); brokerService.addConnector("tcp://127.0.0.1:61616"); brokerService.start(); } }

image-20210116022845378

image-20210116022903297

public class JmsProduce { public static final String ACTIVEMQ_URL = "tcp://localhost:61616"; public static final String QUEUE_NAME = "queue_01"; ... public class JmsConsumer { public static final String ACTIVEMQ_URL = "tcp://localhost:61616"; public static final String QUEUE_NAME = "queue_01"; ... 5. Spring整合ActiveMQ

理解

我们之前介绍的内容也很重要,它更灵活,支持各种自定义功能,可以满足我们工作中复杂的需求。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyysx.html