2015-05-11 55 views
2

我試圖與交易渠道從配置AMQP春一SimpleMessageListenerContainer一樣動態增加消費者的需求。問題是,我沒有看到消費者在我有一個渠道交易時被動態添加。需要明確的是,這並不能動態地添加用戶負載下:SimpleMessageListenerContainer一樣ChannelTransacted和MaxConcurrentConsumers

container.setMaxConcurrentConsumers(5); 
container.setChannelTransacted(true); 
container.setTransactionManager(rabbitTransactionManager); 

但這:

container.setMaxConcurrentConsumers(5); 
//container.setChannelTransacted(true); 
//container.setTransactionManager(rabbitTransactionManager); 

我的問題是:

  1. 爲什麼沒有被添加消費者動態?
  2. 有沒有解決方法來同時引導通道交易和動態消費者?

回答

2
  1. 這是一個錯誤 - 請打開JIRA issue

  2. 沒有一個解決辦法,可惜;它需要一個補丁。

與RabbitMQ交易的使用相當少見,特別是在消費者方面 - 您能解釋爲什麼您需要它們嗎?

+0

我打開了一個[JIRA問題](https://jira.spring.io/browse/AMQP-498)。 –

+0

感謝您解答此問題。我的團隊正在使用他們,因爲我們認爲他們有助於緩解信息丟失。你有建議更好的策略嗎? –

+1

您不需要消費方的交易來避免消息丟失;在消費者方面,交易只適用於確認,而不是交付消息本身。即使沒有事務,也不會有丟失消息的危險,因爲只有在收到確認時纔會將它們從隊列中刪除(即,使用AUTO ackmode時 - 默認 - 如果您使用AckMode NONE - 稱爲兔子說autoAck)。您可以閱讀[關於RabbitMQ文檔中的所有事務](https://www.rabbitmq.com/semantics.html)。 –

相關問題