(三) ActiveMQ的可靠性(持久化、事务与签收) 与 Broker

本文围绕ActiveMQ展开,分析其可靠性,包括持久化(分Queue和Topic的持久与非持久情况)、事务(创建session时开启,需手动提交)、签收(分自动和手动等模式,事务与签收有大小关系)。还介绍了ActiveMQ的Broker,即服务器实例,可嵌入Java代码,节省资源并保证可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActiveMQ的可靠性

ActiveMQ的可靠性我们主要从一下三点分析

  • PERSISTENT: 持久化
  • Transacted: 事务
  • Acknowkedge: 签收

持久化

持久化可以在创建生产者之后开启:
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);

看一下DeliveryMode的源码,来了解setDeliveryMode的参数。

package javax.jms;

public interface DeliveryMode {
   
   
	//非持久化
    static final int NON_PERSISTENT = 1;	
	//持久化
    static final int PERSISTENT = 2;
}
  1. 参数设置说明:
  • 持久:当服务器宕机,消息依然存在。
    messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);

  • 非持久:当服务器宕机,消息不存在
    messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

  1. 持久的Queue
    默认为持久化。持久化消息,这是队列的默认传送方式,此模式保证这些消息只被传送一次和成功使用一次。对于这些消息,可靠性是优先考虑的因素。

    可以去测试一下,发布的消息,经历过MQ服务器的重启之后消息仍然存在。

    可靠性的另一个重要方面是确保持久性消息传送志目标后,消息服务在向消费者传送他们之前不会丢失这些消息。

  2. 持久的Topic
    持久订阅

    1. 一定要先运行一次消费者,等于向MQ注册,类似于我订阅了这个主题
    2. 然后再运行生产者发送消息
    3. 此时无论消费者是否在线,都会接收到。不在线的话,下次连接的时候,会把没有收过的消息都接收下来。

需要生产者设置持久化:
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
消费者创建订阅:
TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "remark...");

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

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

测试一下持久化订阅

public static final String ACTIVEMQ_URL = "tcp://129.*.*.*:61616";
	public static final String TOPIC_NAME = "topic02";

	public static void main(String[] args) throws Exception {
   
   

		System.out.println("*****t2");
		
		// 创建连接工厂
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
		// 创建连接Connection
		Connection connection = connectionFactory.createConnection();
		connection
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxg45

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值