0
点赞
收藏
分享

微信扫一扫

Spring RabbitMQ Transaction

三分梦_0bc3 2022-10-28 阅读 72


For synchronous use cases with RabbitTemplate,the template has been configured with channelTransacted=true.(channelTransacted是否主动ack)

@Transactional
public void doSomething() {
String incoming = rabbitTemplate.receiveAndConvert();
// do some more database processing...
String outgoing = processInDatabaseAndExtractReply(incoming);
rabbitTemplate.convertAndSend(outgoing);
}

For asynchronous use cases with SimpleMessageListenerContainer,

@EnableTransactionManagement(proxyTargetClass = true)

@Configuration
public class ExampleExternalTransactionAmqpConfiguration {

@Bean
public SimpleMessageListenerContainer messageListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setTransactionManager(transactionManager());
container.setChannelTransacted(true);
container.setQueueName("some.queue");
container.setMessageListener(exampleListener());
return container;
}

}

static class TxServiceImpl implements TxService<Foo> {

@Override
@Transactional
@RabbitListener(...)
public String handle(@Payload Foo foo, @Header("amqp_receivedRoutingKey") String rk) {
...
}

}




举报

相关推荐

0 条评论