我正在尝试使用spring amqp的回滚/提交功能。 根据文档,我需要在rabbitTemplate和SimpleMessageContainer中将 channelTransacted 设置为true。
我的最终目标是移动基于xml的所有代码而不是注释方法。但是对于POC的目的,我正在研究spring-rabbit-helloworld样本。
在我的消费者中,如果我抛出异常,它会继续重试并且不会进行任何回滚。
@Bean
public SimpleMessageListenerContainer listenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setQueueNames(this.helloWorldQueueName);
container.setMessageListener(new MessageListenerAdapter(new HelloWorldHandler()));
container.setChannelTransacted(true);
//container.setTxSize(1);
//container.setRecoveryInterval(1000);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
//container.setRecoveryInterval(1000l);
container.setDefaultRequeueRejected(true);
return container;
}
和
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setRoutingKey(this.helloWorldQueueName);
template.setChannelTransacted(true);
return template;
}
收件人:
public void onMessage(Message msg) throws Exception {
System.out.println("Received: " + msg);
throw new RuntimeException("error");
}
我尝试了各种组合,但没有奏效。
我们的设计是将MessageListener(javax.jms.MessageListener)附加到容器。
除了设置rabbitTemplate的属性外,我是否还需要在制作人中做任何事情?