死信队列是消息队列中非常重要的概念。同时,我们需要延迟发送业务方案的概念,例如12306年30分钟而无需支付取消命令。通过开关。
在理解死信队列之前,我们首先解释什么是死亡字母。SO被称为死的信件是没有成功消费的消息,但并非所有未能成功消费的新闻都是死者的消息。参数要求设置为False(2)已过期的消息分为两种类型:a。发送消息时,请设置某个消息的时间(消息TTL),如果生存时间结束了,该消息尚未消耗,它将被标记为死信b的新闻b。设置队列新闻。对于队列中的所有新闻,如果生存时间结束了,那么该新闻尚未消耗,也不会消耗。,它发送的消息将直接成为一条死信件
直接说,用来制作死信的队列是一个死的字母队列,似乎是胡说八道,因此它专注于理解死信的概念。
死书队列的角色:(1)在队列中,该消息将发送到死信队列,以免丢失消息,然后将死者队列中的消息接收到消费消费的信息。(2)根据死信队列可以实现延迟消耗的效果。特定于我们的关注点解释
死信开关和致命队列实际上是普通的开关和队列,但是他们被专门宣布存储死信的新闻。我们只需要按方法声明死信转换,然后使用该方法来声明“死信”队列
如以下代码所示,我们创建了截止日期开关和死信的中间。
:涉及队列的修改和开关属性,如果队列和交换机已经需要在生效之前将其删除,否则可能会报告错误。
(1)在发送消息时设置生存时间
(2)在队列中设置生存时间
上面我们说的是,死信队列也可以延迟。这个想法是:(1)发送消息时设置消息的生存时间。
正常队列的消息没有消费者消费,同时指定了生存时间。到达时间后,新闻转发给了死信队列,消费者监视了致命队列以消耗它。
如果有两条消息,一个是5s的生存时间,另一个是10s的生存时间。当我们第一次将10S生存时间的新闻发送到排队时,因为RabbitMQ只会监视队列前面最外面新闻的生存时间,即监视,即监视10S的生存时间,以及新闻的新闻和新闻只有在10S新闻到期之后,才能监视5S生存时间,这也使我实际上需要5S生存的新闻。实际的10次仅听到。
因此,仅在延迟时间的同一时间内使用基于死字母队列的延迟消息。
为了适应更多的延迟场景,实施延迟新闻更为简单。我们介绍了延迟开关
延迟开关不是RabbitMQ的功能,而必须通过安装延迟的开关插头来实现
我们已经解释了其插头的安装,不再疲倦。您可以参考以下博客文章SpringCloud:安装RabbitMQ并配置延迟队列插头-in
由延迟开关实现的延迟消息主要在交换机上。队列是普通队列。消息发送到交换机后,将记录消息的延迟时间。您可以在指定的时间获取消息
因此,延迟开关和普通开关的实现。创建开关时,其他操作与普通开关没有什么不同,因此使用也很方便
创建一个延迟开关。通过属性声明开关类型,它可以是直接的或主题。专门支持4中的开关类型。如果您不知道,请参阅上一篇博客文章。
指定发送消息时的延迟时间,单位毫秒
我们还可以将此方法封装为工具方法,这很方便调用
延迟消息的应用程序方案很丰富。除了在文章开头提到的30分钟提及的30分钟之外,还会自动取消该订单,并在交货后自动签署72小时
基本上,兔子延迟队列都可以实现所有需要延迟的业务场景。
对于刚刚与RabbitMQ接触的学生,我将向所有人提供一个实践问题,并让所有人在实际实践中加强对RabbitMQ的理解:
要求:订单到达后的72小时,未签署自动签名,自动签名说明:我们需要在订单到达后实现自动签名功能。订单到达后,将触发自动签名消息的发送方法。到达状态为1。如果状态在72小时之前更新为2,则需要自动签名(未执行自动签名,则是,自动签名消息被忽略)
原始:https://juejin.cn/post/7102722834375376904
