2013-08-14 5 views
3

Я хочу добавить JMS в существующий проект интеграции с пружиной. Файл XML, что я хочу изменить выглядит следующим образом:диспетчер не имеет подписчиков - интеграция пружин JMS

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns="http://www.springframework.org/schema/integration" 
xmlns:jms="http://www.springframework.org/schema/integration/jms" 
xmlns:int-http="http://www.springframework.org/schema/integration/http" xmlns:task="http://www.springframework.org/schema/task" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd 
    http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd 
    http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd 
    http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd"> 

<channel id="eventUpdateChannel" /> 

<chain input-channel="eventUpdateChannel" output-channel="eventUpdateChannelRouter"> 
(...) 
</chain> 
(...) 
</bean> 

и это workes хорошо, сообщения, которые приходят через eventUpdateChannel обрабатываются.

Посмотрев на примерах с сайта Spring Integration я изменил, что XML-файл следующим образом:

(...) 
<channel id="eventUpdateChannel" /> 
<channel id="jmsEventUpdateChannel" /> 

<jms:message-driven-channel-adapter id="jmsIn" destination="inboundMessageQueue" channel="eventUpdateChannel" /> 
<jms:outbound-channel-adapter id="jmsOut" channel="jmsEventUpdateChannel" destination="inboundMessageQueue"/> 

<chain input-channel="jmsEventUpdateChannel" output-channel="eventUpdateChannelRouter"> 
(...) 

Я также добавил эту часть:

<!-- JMS --> 
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory"> 
     <bean class="org.apache.activemq.ActiveMQConnectionFactory"> 
      <property name="brokerURL" value="vm://localhost"/> 
     </bean> 
    </property> 
    <property name="sessionCacheSize" value="10"/> 
    <property name="cacheProducers" value="false"/> 
</bean> 

<bean id="inboundMessageQueue" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="queue.request"/> 
</bean> 

Теперь после того, как приложение будет запущено и когда он получает сообщение, сообщение не обрабатывается, и я получаю это предупреждение:

org.springframework.integration.MessageDeliveryException: Dispatcher has no subscribers for channel eventUpdateChannel. 

ответ

1

Ваш адаптер отправляет свои данные в eventUpdateChannel, у которого больше нет подписки.

Ранее <chain/> был подписан на него.

Основываясь на ваш комментарий ниже, вам нужно

<channel id="eventUpdateChannel" /> 

<jms:outbound-channel-adapter id="jmsOut" channel="eventUpdateChannel" destination="inboundMessageQueue"/> 

<jms:message-driven-channel-adapter id="jmsIn" destination="inboundMessageQueue" channel="jmsEventUpdateChannel" /> 

<channel id="jmsEventUpdateChannel" /> 

<chain input-channel="jmsEventUpdateChannel" output-channel="eventUpdateChannelRouter"> 

Если все, что вы делаете с помощью JMS за настойчивость, вы можете удалить адаптеры и просто сделать eventUpdateChannel JMS-поддержанные канала. Если вы используете его для распространения работы с другими JVM, то адаптеры являются правильным выбором.

+0

Спасибо за ваши отзывы. Не следует ли подписываться на него «jms: message-driven-channel-adapter»? Как подключить jms к этому каналу, если не так, как я это сделал? – Rudi

+0

Нет; адаптер, управляемый сообщением, является производителем; нет потребителя (абонента). Я не знаю точно, что вы пытаетесь сделать, поэтому я не могу спекулировать. В настоящее время у вас есть 2 подписчика на 'jmsEventUpdateChannel' - цепочку и исходящий адаптер. –

+0

Я хочу, чтобы сообщение, появившееся из 'eventUpdateChannel', перешло в очередь jms и из этой очереди в цепочку. Следует ли подключать исходящий адаптер к «eventUpdateChannel», а затем к адаптеру, управляемому сообщениями, к «jmsEventUpdateChannel»? – Rudi

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