2013-05-20 3 views
1

У нас есть требование, в котором я буду развертывать приложение на n числе серверов, скажем S1, S2, .... Sn.There имеет активную очередь MQ, определенную на один из серверов, скажем, S1.I настроил мои серверы для создания сообщений и поместил их в ту же очередь, которая настроена на S1. Хотя все серверы настроены на использование одной и той же очереди для хранения полученных сообщений, мое требование состоит в том, чтобы только один из n серверов обрабатывал все сообщения из очереди, опять же скажем S1.So, а все серверы от S1, S2, ... Sn могут создавать и хранить их в очереди, сконфигурированной на S1, только S1 должен обрабатывать все из них. Именно поэтому я отключил часть MessageListener для всех серверов, кроме S1. По какой-то причине S1 не обрабатывает все. Я чувствую, что очередь распределяет сообщения в циклическом режиме, несмотря на то, что остальные Слушатели отключены. S1 обрабатывает каждое альтернативное сообщение в случае, когда два сервера обращаются к очереди. Любая помощь для решения этой проблемы была бы весьма признательна.ActiveMQ: прослушиватель сообщений не обрабатывает все записи в очереди

Примечание: если это может помочь, я использую шаблон Spring JMS и полную конфигурацию Spring JMS для JMS.

Вот моя конфигурация фрагмент XML

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
<property name="brokerURL" value="tcp://ipaddress:61617"/> 
</bean> 
<bean id="cscoDest" class="org.apache.activemq.command.ActiveMQQueue"> 
<constructor-arg value="STOCKS.CSCO" /> 
</bean> 
<!--The message listener--> 
<bean id="portfolioListener" class="my.test.jms.Listener"> 
</bean> 
<!--Spring DMLC--> 
<bean id="cscoConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102"> 
<property name="connectionFactory" ref="jmsConnectionFactory" /> 
<property name="destination" ref="cscoDest" /> 
<property name="messageListener" ref="portfolioListener" /> 
</bean> 
<!--Spring JMS Template--> 
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
<property name="connectionFactory" ref="jmsConnectionFactory" /> 
</bean> 
<bean id="stockPublisher" class="my.test.jms.SpringPublisher"> 
<property name="template" ref="jmsTemplate" /> 
<property name="destinations"> 
<list> 
<ref local="cscoDest" /> 
</list> 
</property> 
</bean> 

выше конфигурация присутствует во всех моих servers.I'm отключении боба в «portfolioListener» и это отображение свойства в «cscoConsumer» во всех серверах, кроме один из которых является S1 в соответствии с приведенным выше примером. Но все же сообщения пропускаются циклическим способом.

+0

'Я отключил MessageListener часть всех серверов, кроме S1': Как вы отключили это? Может быть, это действительно не отключено, и поэтому вы все еще видите круговое распространение! – brainOverflow

ответ

0

«Я чувствую, что очередь распределяет сообщения по круговой ...».

Это не может произойти, если нет активного потребителя на других серверах; брокер будет (может) отправлять сообщения только когда есть потребитель.

+0

Итак, вы хотите сказать, что очередь не будет отправлять все сообщения в один уникальный потребитель для обработки, хотя я отключил всех других потребителей? Мне просто нужен один потребитель, но несколько продюсеров в одной очереди. –

+0

Нет; Я говорю, что если другие потребители отключены, брокер отправит все сообщения одному потребителю. –

+0

Я добавил свой XML-фрагмент конфигурации в открывателе потоков. Пожалуйста, изучите его. –

0

Я понял. Виноват. Я только закомментировать свойство «MessageListener» от потребителей на ключ servers.The, чтобы отключить следующий компонент -

<bean id="cscoConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102"> 

Благодарю вас так много Гэри за help.Appreciate него.

Смежные вопросы