我有一个单独的发布者和消费者。我开始发布并发布消息。现在我开始使用消费者,问题是消息从就绪队列移动到unack队列,将消息标记为redeivered,我想避免。所以我想要什么只有当我发送确认而不是消费者重新启动或启动
时才应将其标记为重新传送配置:
@Bean
public org.springframework.amqp.rabbit.connection.Connection mqConnection() {
CloudFactory cloudFactory = new CloudFactory();
Cloud cloud = cloudFactory.getCloud();
return cloud.getServiceConnector("mqservicename", ConnectionFactory.class,
null).createConnection();
}
@Bean
public StatefulRetryOperationsInterceptor interceptor() {
return RetryInterceptorBuilder.stateful().retryOperations(retryTemplate()).recoverer(new RejectAndDontRequeueRecoverer())
.build();
}
@Bean
public SimpleMessageListenerContainer listenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setMessageListener(new MessageListenerAdapter());
container.setAdviceChain(new Advice[] {
interceptor()
});
return container;
}
@Bean
public RetryTemplate retryTemplate(){
Map map=new HashMap<Class<? extends Throwable>, Boolean>();
map.put(CustomException.class, true);
RetryTemplate retryTemplate=new RetryTemplate();
retryTemplate.setRetryPolicy(new SimpleRetryPolicy(3,map));
return retryTemplate;
}
答案 0 :(得分:0)
如果您使用的是Spring AMQP,则需要在提出类似问题时显示您的配置。
如果您将确认模式设置为MANUAL,则您需要负责。阅读the documentation。对于AUTO ackmode,容器将在侦听器正常返回时响应消息。