Как добавить несколько JMS MessageListners в один MessageListenerContainer для Spring Java Config
У меня был следующий код XML в моем spring-config.xml
<jms:listener-container acknowledge="auto"
connection-factory="cachedConnectionFactory" container-type="default"
error-handler="consumerErrorHandler" concurrency="20-25">
<jms:listener destination="#{TaskFinished.destination}"
method="onMessage" ref="taskFinished" />
</jms:listener-container>
Теперь я конвертировал свой весенний конфигурационный XML-файл в конфигурацию Java.
Я перевел это как
@Bean(name = "consumerJmsListenerContainer")
public DefaultMessageListenerContainer consumerJmsListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer
.setConnectionFactory(cachingConnectionFactory());
messageListenerContainer.setConcurrency("20-25");
messageListenerContainer.setErrorHandler(new ConsumerErrorHandler());
messageListenerContainer
.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
messageListenerContainer.setMessageListener(new TaskFinished());
return messageListenerContainer;
}
Что мне нужно знать, так это если бы в контейнере сообщений было более одного MessageListner, например
<jms:listener-container acknowledge="auto"
connection-factory="cachedConnectionFactory" container-type="default"
error-handler="consumerErrorHandler" concurrency="20-25">
<jms:listener destination="#{questionGeneration.destination}"
method="onMessage" ref="questionGeneration" />
<jms:listener destination="#{friendShipLogic.destination}"
method="onMessage" ref="friendShipLogic" />
<jms:listener destination="#{postAvailabilityChecker.destination}"
method="onMessage" ref="postAvailabilityChecker" />
<jms:listener destination="#{playOn.destination}" method="onMessage"
ref="playOn" />
</jms:listener-container>
Как я мог преобразовать этот код XML в конфигурацию Java?
2 ответа
Решение
Пространство имен - это просто удобство - каждый <jms:listener/>
элемент получает свой собственный DMLC
; внешний (контейнерный) элемент - это просто средство доставки общих атрибутов.
Можете добавить container.setConcurrentConsumers(10);
где количество потребителей составляет 10
Вы можете добавить несколько аннотаций, каждая со своим параллелизмом.
@JmsListener(id="1", destination = "mydestination", containerFactory = "myfactory", concurrency ="1-5")
@JmsListener(id="2", destination = "mydestination", containerFactory = "myfactory", concurrency = "3-5")