[英]Spring Transaction Management: using @Transactional vs using AOP (<aop:advisor)
[英]Spring RabbitMQ PooledChannelConnectionFactory, transactional vs non-transaction pool settings
我有一個 Spring Boot 服務需要跨多個 RMQ 虛擬主機監聽消息。 到目前為止,我只需要使用消息,盡管在不久的將來我可能需要將消息發布到第三個虛擬主機。 出於這個原因,我轉向了 RMQ 連接工廠的顯式配置——每個虛擬主機一個連接工廠。
查看文檔PooledChannelConnectionFactory 符合我的需求。 我不需要對消息進行嚴格排序、相關發布者確認或緩存到單個 vhost 的連接。 我對 rabbit 所做的一切都是接收消息並更新數據庫中的條目。
@Bean
PooledChannelConnectionFactory pcf() throws Exception {
ConnectionFactory rabbitConnectionFactory = new ConnectionFactory();
//Set the credentials
PooledChannelConnectionFactory pcf = new PooledChannelConnectionFactory(rabbitConnectionFactory);
pcf.setPoolConfigurer((pool, tx) -> {
if (tx) {
// configure the transactional pool
}
else {
// configure the non-transactional pool
}
});
return pcf;
}
我需要幫助的是了解事務池和非事務池之間的區別。 我對 RMQ 和 AMQP 的理解是,除非您在其之上構建 RPC 語義(回復隊列和交換),否則一切都是異步的。 因此,該通道池如何具有事務屬性?
我目前的方法是通過將 min/max 設置為 0 來禁用其中一個配置,並將另一個配置的 min/max 設置為 1。我不希望通過服務有極大的音量,並且我希望水平擴展應用程序將擴展使用消息的能力。 還有什么我應該考慮的嗎?
池是獨立的; 只要您不使用將channelTransacted
設置為 true 的RabbitTemplate
,您就不會獲得任何事務通道,因此無需擔心像這樣配置池。
例如,可以使用事務以原子方式發送一系列消息(如果事務回滾,則全部發送或不發送)。 如果您正在與其他一些事務(例如 JDBC)同步,這很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.