codecamp

SpringCloud RabbitMQ Binder概述

以下简化图显示了RabbitMQ绑定程序的工作方式:

图41.1。RabbitMQ Binder

兔子粘合剂

默认情况下,RabbitMQ Binder实现将每个目的地映射到TopicExchange对于每个消费者组,Queue绑定到该TopicExchange每个使用者实例为其组的Queue有一个对应的RabbitMQ Consumer实例。对于分区的生产者和使用者,队列带有分区索引后缀,并将分区索引用作路由键。对于匿名使用者(没有group属性的使用者),将使用自动删除队列(具有随机唯一名称)。

通过使用可选的autoBindDlq选项,您可以配置活页夹以创建和配置死信队列(DLQ)(以及死信交换机DLX,以及路由基础结构)。默认情况下,死信队列具有目标名称,后跟.dlq如果启用了重试(maxAttempts > 1),则在重试用尽后,失败的消息将传递到DLQ。如果禁用了重试(maxAttempts = 1),则应将requeueRejected设置为false(默认值),以便将失败的消息路由到DLQ,而不是重新排队。此外,republishToDlq使绑定程序将失败的消息发布到DLQ(而不是拒绝它)。通过此功能,可以将其他信息(例如x-exception-stacktrace标头中的堆栈跟踪)添加到标头中的消息中。此选项不需要启用重试。您只需尝试一次即可重新发布失败的消息。从1.2版开始,您可以配置重新发布邮件的传递模式。请参阅republishDeliveryMode属性

requeueRejected设置为true(与republishToDlq=false一起使用)会导致消息被重新排队并连续重新发送,除非失败的原因是短暂的,否则这可能不是您想要的。通常,应通过将maxAttempts设置为大于1或将republishToDlq设置为true在活页夹中启用重试。

有关这些属性的更多信息请参见“ RabbitMQ Binder Properties”

该框架没有提供任何标准机制来使用死信消息(或将其重新路由回主队列)。“ Dead-Letter队列处理”中介绍了一些选项

 在Spring Cloud Stream应用程序中使用多个RabbitMQ活页夹时,重要的是禁用'RabbitAutoConfiguration'以避免将来自RabbitAutoConfiguration的相同配置应用于两个活页夹。您可以使用@SpringBootApplication批注来排除该类。

从版本2.0开始,RabbitMessageChannelBinderRabbitTemplate.userPublisherConnection属性设置为true,以便非事务生成器避免对使用者的死锁,如果由于代理上的内存警报而阻止了缓存的连接,则可能发生死锁

 当前,multiplex使用者(一个使用者正在监听多个队列)仅受消息驱动的使用者支持;被轮询的使用者只能从单个队列中检索消息。


SpringCloud RabbitMQ Binder 用法
SpringCloud RabbitMQ Binder Properties
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

三、Spring Cloud Netflix

SpringCloud Hystrix超时和Ribbon客户

SpringCloud 重试失败的请求

五、Spring Cloud Stream

六、SpringCloud Binder实现

SpringCloud 重试RabbitMQ Binder

SpringCloud Dead-Letter队列处理

八、Spring Cloud Sleuth

SpringCloud 当前Span

十二、Spring Cloud for Cloud Foundry

十三、Spring Cloud Contract

Spring Cloud Contract验证程序设置

SrpingCloud Gradle项目

十五、Spring Cloud网关

Spring Cloud 配置路由谓词工厂和网关过滤工厂

Spring Cloud TLS / SSL

Spring Cloud网关配置

SpringCloud 故障排除

十八、Spring Cloud GCP

Spring Cloud GCP Spring资源

Spring Cloud Spring JDBC

Spring Cloud Redis的Cloud Memorystore

Spring Cloud 云身份识别代理(IAP)身份验证

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }