構成可能な数のメッセージセレクターを持つキューにメッセージがあるという要件があります。これらのメッセージを並行して処理する必要がある場所。
慎重に検討した結果、複数の DefaultMessageListenerContainers を使用すると良い結果が得られるようになりました。
だから私はすべてを構成しました
<bean id="parallelProcess"
class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="prototype">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="autoStartup" value="false"/>
<property name="destinationName" value="parallel.process.queue"/>
<property name="messageListener" ref="messageProcessor"/>
</bean>
その場で DefaultMessageListenerContainers を作成する
for (String selector : messageSelectors.getSelectors()) {
parallelProcess.setMessageSelector("Message" + " = '" + selector + "'");
parallelProcess.start();
}
問題は、3 つのセレクターがある場合、最後の 1 つのみに対して DefaultMessageListenerContainer を作成していることです。つまり、selectors={"TYPE1", "TYPE3", "TYPE3"}の場合
TYPE3 のメッセージのみがメッセージ リスナーにキャッチされます
前もって感謝します