RabbitMQ实现可靠性消息投递---保证消费者接收到消息

本文探讨了RabbitMQ如何实现可靠性消息投递,包括确保消息发送到服务器、从交换机路由到队列、在队列中正确存储以及从队列投递到消费者。介绍了使用事务和确认模式、队列与交换机持久化、消息确认机制等关键解决方案。
摘要由CSDN通过智能技术生成

一、保证可靠性消息投递

首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率造成影响。 如果是一些业务实时一致性要求不是特别高的场合,可以牺牲一些可靠性来换取效率。

在消息投递过程中,一共有四处需要保证可靠性。如图。
在这里插入图片描述

  1. 代表消息从生产者发送到Exchange;
  2. 代表消息从Exchange路由到Queue;
  3. 代表消息在Queue中存储;
  4. 代表消费者订阅Queue并消费消息。

二、解决方案

2.1 确保消息发送到RabbitMQ服务器

可能因为网络或者Broker的问题导致1失败,而生产者是无法知道消息是否正确发送到Broker的。 有两种解决方案,第一种是Transaction(事务)模式,第二种Confirm(确认)模式。

  1. Transaction(事务)模式:
    在通过channel.txSelect方法开启事务之后,我们便可以发布消息给RabbitMQ了,如果事务提交成功,则消息一定到达了RabbitMQ中,如果在事务提交执行之前由于RabbitMQ异常崩溃或者其他原因抛出异常,这个时候我们便 可以将其捕获,进而通过执行channel.txRollback方法来实现事务回滚。使用事务机制的话会很大程度消耗RabbitMQ的性能,一般不建议使用。
  2. Confirm(确认)模式:
    生产者通过调用channel.confirmSelect方法(即Confirm.Select命令)将信道设置为confirm模式。一旦消息被投 递到所有匹配的队列之后,RabbitMQ就会发送一个确认(Basic.Ack)给生产者(包含消息的唯一ID),这就使得生产者知晓消息已经正确到达了目的地了。

2.2 确保消息从交换机路由到正确的队列

可能因为路由关键字错误,或者队列不存在,或者队列名称错误导致2失败。 这种情况一般不存在,队列和交换机都是进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值