crm开发定制RabbitMQ如何保证消息发送、消费成功

crm开发定制好记忆不如烂笔头,crm开发定制能记下点东西,就记下点,crm开发定制有时间拿出来看看,crm开发定制也会发觉不一样的感受。

目录

crm开发定制消息因为其:削峰,异步,crm开发定制解耦的特性,被很多公司的很多工程师所用。 为MQ实现的中间件之一,是如何保证消息发送成功,并且消费成功的呐?

1.发送确认机制设置

要得到rabbitmq发送消息被接收并且消费成功,必须是设置confirm 模式,即设置信道需要为 confirm 信任模式,则所有在信道上发布的消息都会分配一个唯一 ID(也可以根据业务情况手动分配一个messageID),消息被投递到exchange交换机,再投递给消费者,在消费者消费成功确认后,会给生产者(包含消息唯一ID)返回确认信息,告知生产者,消息消费成功。

信道信任确认模式配置如下图所示:

2.消息丢失、非信任或失败

如果 RabbitMQ发生内部错误从而导致消息丢失,消息消息者就会接收不到消息;如果消息的信息ID为空,会发送一条ack消息给生产者为非信任消息。

如果消息被消费失败,则会告知生成者,消息消费失败,会被nack给rabbitmq,消息信息会在次返回到队列中,不会被清除,信道处理消息返回队列设置如下:

所有被发送的消息都将被 ack 或者被nack一次。但是没有对消息被ack 或nack 的快慢做任何保证,并且同一条消息不会既被 ack又被nack。

3.消息重复消费

消息在没有做好控制的情况下,可能会重复消费,所以需要判断是否重复消费

 4.消费成功通知

消息在被消费成功之后,会告诉rabbitmq,生产者发送的消息,已经被我成功消费了。

5.总结

5.1.发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息。当确认消息到达生产者,生产者的回调方法会被触发。
5.2 ConfirmCallback接口:只确认是否正确到达 Exchange 中,成功到达则回调。
5.3 ReturnCallback接口:消息失败返回时回调。
5.4 消费者在声明队列时,可以指定noAck参数,当noAck=false时,rabbitmq会等待消费者显式发回ack信号后才从内存(或者磁盘,持久化消息)中移去消息。否则,消息被消费后会被立即删除5.5 消费者接收每一条消息,处理完业务逻辑后须进行确认,只有消费者确认了消息,rabbitmq才能安全地把消息从队列中删除。
5.6 rabbitmq不会为未ack的消息设置超时时间,它判断此消息是否需要重新投递给消费者的唯一依据是消费该消息的消费者连接是否已经断开。这么设计的原因是rabbitmq允许消费者消费一条消息的时间可以很长。保证数据的最终一致性;
5.7 极端情况下,如果消费者返回ack之前断开了链接,rabbitmq会重新分发给下一个订阅的消费者,这样可能存在重复消费,需要在编码的时候特别注意。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发