簡體   English   中英

Spring RabbitMQ PooledChannelConnectionFactory,事務與非事務池設置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM