浩克网 手游攻略 软件教程 RabbitMQ 入门系列:7、保障消息不重复消费:产生消息的唯一ID

RabbitMQ 入门系列:7、保障消息不重复消费:产生消息的唯一ID

时间:2023-08-23 14:05:29 来源:网络整理 浏览:0

上一篇文章介绍了如何确保消息不丢失,本文简要介绍了如何确保消息不被重复使用。对于接收者来说,确认消息是需要时间的。如果有多个客户端在同一个队列中侦听,

那么存在多个客户端可以接收相同信息的一定概率。这时,消息重复的问题就出现了:

1.应对消息重复消费的几种方式:人们在网上说的两种主要方式:

方法一:Redis:使用setnx命令判断消息id。方法三:数据库:做唯一索引,消息id可以插入处理,重复消费会失败。优点和缺点:

方法一:Redis setnx分布式锁:不推荐:一种不靠谱的方式。如果项目允许数据出现错误,可以尝试使用。为什么不靠谱?

你可以参考https://zhuanlan.zhihu.com/p/418268774的文章

方法二:数据库锁:推荐:可以使用唯一索引,也可以使用事务锁,比较成熟,使用起来也比较简单。

模式三:专属档案和剪报。推荐场景:单机场景。

1.进程间的锁可以通过独占打开和释放文件来实现。2.进程间的锁可以通过读写剪报来实现。前面的方法都有一个元素,即需要消息的唯一ID。

2.如何生成消息的唯一ID:A:对消息进行哈希处理,将哈希值作为唯一ID(不可避免地存在生成相同哈希的一定概念)。b:对于发送的每条消息,都会生成一个GUID,这样当获得消息时,

您可以获得对应于该消息的唯一ID。让我们看看代码演示:

带唯一ID:使用(var频道=兔子。实例。默认连接。创建模型()){频道.BasicReturn=(sender,e)={ //通过交换机发送过去,

4. Receiving the message: Get the unique ID of the message: var channel=rabbit. instance . default connection . create model(); Var consumer=basic consumer (channel) of new event; Consumers. Received=(model, ea)={ var message=code. UTF8.GetString(ea。 body . to array()); Console. WriteLine ('received default message' {0}' message); Console. WriteLine ('received default message GUID {0}, ea. basic properties . MessageId); Try {channel. BasicAck(ea。 DeliveryTag,false); } catch (exception error) {//Handling the failure of confirmation.

标题:RabbitMQ 入门系列:7、保障消息不重复消费:产生消息的唯一ID
链接:https://www.52hkw.com/news/rj/56743.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
Tiktok专用的梯子加速器(TK加速器全球加速)

Tiktok作为当前最火爆的短视频平台,受到了全球用户的热烈欢迎。然而,由于网络限制或者其他原因,很多用户在观看

2023-08-23
怎么不让快递放菜鸟驿站

菜鸟裹裹怎么禁止放快递?经常网购的小伙伴都知道,如果附近有菜鸟驿站,那么驿站的快递员会默认选择放在驿站中,并

2023-08-23
菜鸟驿站怎么送货上门

菜鸟裹裹怎么送货上门?有过菜鸟驿站拿快递的小伙伴都知道,很多菜鸟驿站在派送快递时,默认是放在菜鸟驿站,需要我

2023-08-23
蚂蚁庄园2021年3月4日最新答案

蚂蚁庄园3月4日答案最新是什么?在支付宝蚂蚁庄园每日一题中,每天都会有多个问题等着大家来回答,回答正确后即可

2023-08-23