RabbitMQ4/4---消息可靠性

1.消息可靠性

RabbitMQ消息可靠性

RabbitMQ的消息可靠性,一般是业务系统接入消息中间件时,首先要考虑的问题,一般通过三个方便保障:
发送可靠性:确保消息成功发送到Broker
存储可靠性:Broker对消息持久化,确保消息不会丢失
消费可靠性:确保消息成功被消费

(1)发送可靠性

一般消息发送可靠性分为三个层级:
At most once:最多一次,消息可能会丢失,但绝对不会重复传输。(几乎不用)
At last once:最少一次,消息绝对不会丢失,但可能会重复传输。(常用)
Exactly once:恰好一次,每条消息肯定会被传输一次且仅传输一次。(RabbitMQ中没有)

RabbitMQ支持其中的“最多一次”和“最少一次”。

其中“最少一次”投递实现需要考虑一下几个方面的内容:

  • 消息生产者需要开启事务机制或者publisher confirm(更常用)机制,已确保消息可以可靠地传输到RabbitMQ中。

  • 消息生产者需要配合使用mandatory参数或者备份交换器来确保消息能够从交换器路由到队列中,进而能够保存下来而不会被丢弃。

  • 最多一次”的方式无须考虑以上那些方面,生产者随意发送,不过这样很难确保消息会成功发送。
    在这里插入图片描述

(2)消费可靠性

消费者在消费消息的同时,需要将autoAck设置为flase,然后通过手动确认的方式去确认已经正确消费的消息,以免在消费端引起不必要的消息丢失。

死信队列:消息垃圾堆,本质上就是普通队列,收到NACK时,将异常消息放到死信队列里,可以查看哪些消息发生了异常,也可以通过一个消费者,来处理异常消息。

消息处理3种方式:正常收到;错误重发;放到死信队列。

2.RabbitMQ插件机制

RabbitMQ 支持插件,通过插件可以扩展多种核心功能:支持多种协议、系统状态监控、其他AMQP 0-9-1交换类型、节点联合等。许多功能都是通过插件实现的。

RabbitMQ内置一些插件,通过rabbitmq-plugins list命令可以查看插件列表。
在这里插入图片描述
可以通过rabbitmq-plugins命令启用或禁用插件

rabbitmq-plugins enable plugin-name
rabbitmq-plugins disable plugin-name

常用插件

rabbitmq_auth_mechanism_ssl
身份验证机制插件,允许RabbitMQ客户端使用X509证书和TLS(PKI)证书进行身份验证。

rabbitmq_event_exchange
事件分发插件,使客户端可以接受到Broker的queue.deleted、exchange.created、binding.created等事件

rabbitmq_management
基于Web界面的管理/监控插件

rabbitmq_management_agent
启用rabbitmq_management时,会自动启用此插件,用于在Web管理中查看集群节点。

rabbitmq_mqtt
MQTT插件,使RabbitMQ支持MQTT协议。

rabbitmq_web_mqtt
使RabbitMQ支持WebSocket订阅消息,基于MQTT协议传输。

RabbitMQ消息可靠性是指确保消息可以安全、可靠地传递到消费者。为了实现消息可靠性RabbitMQ提供了以下机制: 1. 持久化队列:通过将队列设置为持久化,即使RabbitMQ服务器重启,队列中的消息也不会丢失。 2. 持久化消息:将消息设置为持久化,使得即使在RabbitMQ服务器重启前,消息也会被存储在磁盘上。 3. 消息确认机制:生产者可以通过消息确认机制来确保消息已经被成功发送到RabbitMQ中。当消息成功地被RabbitMQ接收到后,生产者会收到一个确认信号。如果RabbitMQ在处理消息时发生错误,生产者可以根据确认信号来重新发送消息。 尽管RabbitMQ提供了上述机制,但仍然存在一些情况下消息可能丢失的风险。例如,如果消息RabbitMQ服务器接收到但尚未持久化到磁盘上时,RabbitMQ服务器崩溃,这可能导致部分消息的丢失。 为了进一步提高消息可靠性,可以采取以下措施: 1. 使用事务:使用事务可以确保消息的原子性提交,即要么全部成功发送,要么全部失败回滚。但是,使用事务会降低RabbitMQ的性能。 2. 设置消息确认模式:可以将消息确认模式设置为"confirm",使得RabbitMQ在收到消息后立即发送确认信号给生产者。 3. 设置备份队列:备份队列可以在主队列发生故障时,将消息转发到备份队列,从而避免消息的丢失。 4. 通过持久化到数据库或其他存储系统来保存重要的消息数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值