延迟队列用于。。发生一段时间后需要特殊处理的场景,例如:
1.在电子商务的支付系统中,如果用户下单后n分钟不付款,订单就会自动取消。2.用户浏览商品很久都没有下单,再推送相关商品和优惠券。3.用户注册或修改生日后:生日短信推送等。4.7天后自动确认收货。
.对于这种应用程序,使用消息队列可能适合某些个人,但对于整个系统应用程序来说并不可靠。消息队列的核心应用是保持内存的队列,内存是不断产生和消耗的,使系统稳定流畅地保持在最佳状态。
延迟队列的核心是消息的积压,这显然不符合消息队列的设计。我们来看看死信队列是如何实现网络传输中的延迟队列的。
2、死信队列的编码:使用(var频道=兔子。实例。默认连接。创建模型()){//定义普通队列来接收丢弃的信息渠道queue declare(' dead ');字典dic2=新字典();dic2 .添加(' x-死信-交换'' ');//使用默认交换机dic2 .Add('x-dead-letter-routing-key '' dead ');//设置转移到的队列dic2 .Add('x-message-ttl '6000);//设置过期时间渠道QueueDeclare('sendtodead '),参数:DIC 2);渠道BasicPublish('' sendtodead 'false,null,Encoding .UTF8。GetBytes('6秒就过期了1。
3.死信队列的应用场景:1 .队列有统一的过期时间,不能使用单个消息的过期时间:
因为MQ不扫描整个队列,只扫描第一个队列来判断是否过期,所以要求高级队列的必须先过期。2.到期时间要短(根据可能积压的数据,一个核心考虑是:10万-100万条数据)避免数据长期积压。
对于长期不消费的,不要存放在MQ里。毕竟MQ的核心是内存队列,不是磁盘队列。4.死信队列:为什么不适合作为延迟队列?了解了死信队列后,你会发现,其实在一个系统中,只有n分钟后才需要处理逻辑的场景。
比较合适,n天后要处理的其他事情不靠谱。而你用了n分钟的场景,你用其他场景吗?
用过的,不靠谱!不,我们必须使用其他方案。方案会不会很多样化,不方便管理?总结:1。如果您必须使用死信队列作为延迟队列,您应该建立许多在第n分钟到期的队列。2.如果您必须使用死信队列作为延迟队列,
那么下一篇文章介绍的官方延迟队列插件会比死信队列更合适。
标题:RabbitMQ 入门系列:9、死信队列:真不适合当延时队列
链接:https://www.52hkw.com/news/rj/56736.html
版权:文章转载自网络,如有侵权,请联系删除!