2016-08-30 8 views
1

直接交換によるアプリケーションの起動時にrabbitMqでキューを作成し、各キューに単一のリスナーを割り当てる必要があります。私たちは、以下の設定でSpring AMQPを使用して実装しました。ウサギのメッセージの並列リッスン

@Bean(name= {"dispatcherListener"}) 
public SimpleMessageListenerContainer dispatcherListener() { 
    SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer(); 
    listenerContainer.setConnectionFactory(connectionFactory()); 
    listenerContainer.setQueues(participantQueues()); 
    listenerContainer.setMessageConverter(jsonMessageConverter()); 
    listenerContainer.setMessageListener(subscriptionListener); 
    listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO); 
    listenerContainer.setAutoStartup(false); 
    return listenerContainer; 
} 

しかし、私たちは上記の設定で問題に直面しました。メッセージを複数のキューにパブリッシュする場合、リスナーは各キューから順次メッセージを読み取ります。しかし、私たちは、他のキューとは独立した各キューからのメッセージを並列に聞くことを期待していました。

私が間違っていた人を案内してくれますか? 何か助けていただければ幸いです

答えて

1

デフォルトのconcurrency1ですので、これは正しい動作です。したがって、すべてのキューに対して1つのリスナーしかありません。

設定の値を大きくすることを検討してください。

さらに詳しい情報はReference Manualにあります。

+1

ただし、常に同じスレッドの同じキューからメッセージを受信する場合は、それぞれに別のコンテナが必要です。 –

+0

お返事ありがとうございます。私はメッセージの順序が失われる可能性があり、私の優先順位が高いため、複数の消費者を使用する傾向はありません。別のコンテナを作成する方が良いでしょうが、実行時にリスナーコンテナを作成できますか?新しいキューが動的に作成されるため、それぞれに別々のコンテナが必要です –

+0

はい、それに必要なすべてのアプリケーションコンテキストインフラストラクチャを提供する必要があります。または、BeanFactory.initializeBeean()を使用してください。 –

関連する問題