我想实现重试功能(当消费者出现问题时)3次,然后消息应该转到另一个队列(死信交换)。我已按如下方式配置队列/交换
常规邮件交换名称:test\u exchange邮件队列:test\u queue test\u queue绑定到具有路由密钥的test\u exchange test\u queue
死信交换名称:test_dlq_exchange死消息队列:test_dlq_queuetest_dlq_queue用路由密钥绑定test_dlq_exchangetest_dlq_queue
在RabbitMQ UI控制台中,我将“x-dead-letter-exchange”配置为“test\u exchange”
下面是SimpleMessageListenerContainer的代码
@Bean
SimpleMessageListenerContainer getMessageListenerContainer(){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames("test_queue");
MessageListenerAdapter adapter = new MessageListenerAdapter();
//configured my message listener class
//configured Jackson2JsonMessageConverter as converter
container.setMessageListener(adapter);
container.setAdviceChain(new Advice[] {retryAdvice()}
return container;
}
//configuration for retryAdvice
@Bean
public MethodInterceptor retryAdvice{
ExponentialBackOffPolicy backoffPolicy = new ExponentialBackOffPolicy();
backoffPolicy.setInitialInterval(10);
backoffPolicy.setMaxInterval(1000);
backoffPolicy.setMultiplier(2);
RabbitTemplate retryTemplate = new RabbitTemplate(connectionFactory());
retryTemplate.setQueue("test_dl_queue");
return RetryInterceptorBuilder
.stateful()
.backOffPolicy(backoffPolicy)
.maxAttempts(3)
.recoverer(
new RepublishMessageRecoverer
(retryTemplate,"test_dl_exchange","test_queue")).build();
}
我的自定义消息侦听器是消息驱动的POJO,它只有我的MessageObject。
由于我使用的是stateful,所以我启用了createMessageId(true)。在消息侦听器中,我再次调用targetobject的方法。启动容器后,流量循环
i、 e将消息发布到队列-
在日志中,我看到如下内容
o.s.r.i.StatefulRetryOperationsInterceptor - Executing proxied method in stateful retry public abstract void org.springframework.amqp.rabbitlistener.SimpleMessageListenerContainer$ContainerDelegate.invokeListener(Channel,Message) throws java.lang.Exception(55435ee)
有人能帮我解决这个问题吗?
由于您使用的是RePublishMessageRecoverer
,因此在代理上配置DLX/DLQ不会做任何事情。为了路由到DLQ,您需要RejectAndDontRequest eueRecover
-当重试耗尽时,消息将被发送到DLX/DLQ。
看起来您正在重新发布到同一队列
(retryTemplate,"test_dl_exchange","test_queue"))
因此产生了无限循环。
下面是我正在使用的配置。消息没有错误,从exchange到队列都可以正常工作,并且侦听器可以进行转换,这很好。对于错误消息,我希望发生的是,当我抛出AmqpRejectAndDontRequeueException时,“rabbitQueue”将消息转发到死信交换,并最终进入“rabbitErrorQueue”但死信交换或队列上没有任何活动。有人知道我做错了什么吗?
问题内容: 我有一个Elasticsearch索引,其中有一些数据。我实现了该功能,所以当用户写错拼写的东西时,它可能会收到带有正确单词的建议。 之所以使用短语建议者,是因为我需要一些简短的短语(例如名称)的建议,问题是索引中不存在某些建议。 例: 我的问题是,索引中没有与指定建议匹配的词组,因此它向我推荐了不存在的词组,因此会给我一个未找到的搜索词。 我该怎么办?短语建议者是否应该为索引中实际存
我试图在IntelliJ中使用ctrl空格键快捷方式来完成代码,但每次我这样做时,它都返回“没有建议”。 这是我的项目目录,即使我键入starter然后按ctrl空格键,即使文件存在于项目目录中,也没有“建议”: 我根据这个线程尝试了以下操作(Intellij IDEA CE 12 Android XML代码完成不起作用): > 转到文件- 转到首选项- 转到文件- 我做错了什么?
我正在开发一个基于区块链的身份识别系统。而且,由于每个项目都将永远在链中,消耗空间,因此我正在考虑添加一个工作证明需求,以便将项目添加到链中。 起初我想到的是比特币,因为这是一种经过尝试和测试的方式来证明这项工作已经完成,但这样做会阻止用户加入,因为比特币还没有被广泛应用。此外,在分布式系统中,不清楚谁应该得到这笔钱。 因此,我正在寻找一种工作证明算法,其复杂性可以根据区块链的增长速度轻松调整,并
问题内容: 尝试在Ubuntu虚拟机上为Arm平台编译Linux内核 它失败如下 尝试安装 在哪里找到正确的包裹?如何将其包含在系统中?(我在网上发现了一些对我不起作用的链接)。如果您能提供正确的解决方案或参考,那就太好了。 问题答案: 从https://sourcery.mentor.com/GNUToolchain/下载arm-2013.05-24-arm-none-linux-gnueabi
由于android中AutoCompleteTextBox中的建议文本的背景颜色和文本颜色相同,所以建议文本是不可见的,我的xml文件是: 我的清单文件是: 我的Java文件是:protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(r.layout.p