2013-08-08 2 views
2

У меня есть требование, когда у меня есть сообщения в очереди с настраиваемым количеством селекторов сообщений. Где мне нужно обрабатывать эти сообщения параллельно.Несколько экземпляров DefaultMessageListenerContainer с разными селекторами сообщений

После тщательного рассмотрения я подошел к точке, где использование нескольких 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 селекторы он создает DefaultMessageListenerContainer только для последнего. то есть, если селекторы = { «ТИП1», «TYPE3», «TYPE3»}

только сообщения с TYPE3 пойманы в сообщении слушателю

Спасибо заранее

ответ

2

После нескольких часов исследования и прибегая к помощи, выяснил, что цикл Еогеаспа я итерация устанавливает тот же parallelProcess так что в конечном итоге установка TYPE3

поэтому решение создать новый боб каждый раз, когда вы цикл ...

вот решение

-
<bean id="myBeanFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean"> 
    <property name="targetBeanName"> 
     <idref local="parallelProcess"/> 
    </property> 
</bean> 

for (String selector : messageSelectors.getSelectors()) { 
     DefaultMessageListenerContainer parallelProcess= myBeanFactory.getObject(); 
     parallelProcess.setMessageSelector(QueueDecisionProcessor.MESSAGE_CATEGORY + " = '" + selector + "'"); 
     parallelProcess.start(); 
    } 
Смежные вопросы