2016-07-28 1 views
0

ActiveMQ에서 Spring Integration API의 PublishSubscribe Channel을 사용하여 제작자와 소비자를 개발했습니다. 구현을 사용하여 메시지를 게시하고 수신 할 수 있지만 단 한 번의 서비스 활성화자가 라운드 로빈 방식으로 메시지를 사용합니다. 나는 그것이 옳은지 확인해야한다.ActiveMQ에서 Spring Integration JMS를 사용하여 Publish Subscribe 구현

생산자 측 :

<int:publish-subscribe-channel id="jmsPubSubChannel" /> 

<int-jms:outbound-channel-adapter channel="jmsPubSubChannel" 
             destination-name="${jms.topic.name}" 
             pub-sub-domain="true" 
             connection-factory="connectionFactory" /> 

<!-- Define the ActiveMQ connection factory --> 
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> 
     <property name="brokerURL" value="${jms.broker.url}"/> 
     <property name="userName" value="${jms.username}" /> 
     <property name="password" value="${jms.password}" /> 
</bean> 

소비자 측면 : 당신은 소비자 측에서

<int:publish-subscribe-channel id="jmsPubSubChannel" /> 

를 추가 할 필요가

<jms:message-driven-channel-adapter id="messageDrivenAdapter" 
              channel="jmsPubSubChannel" 
              destination-name="${jms.topic.name}" 
              pub-sub-domain="true" /> 

<!-- Subscriber - offeringmsg --> 
<int:service-activator id="offeringmsg1" input-channel="jmsPubSubChannel" ref="impl1" /> 

<int:service-activator id="offeringmsg2" input-channel="jmsPubSubChannel" ref="impl2" /> 

<bean id="impl1" class="com.intuit.imp.mql.MessageListenerImpl" /> 

<bean id="impl2" class="com.intuit.imp.mql.MessageListenerImpl2" /> 

<!-- Define the ActiveMQ connection factory --> 
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> 
      <property name="brokerURL" value="${jms.broker.url}"/> 
      <property name="userName" value="${jms.username}" /> 
      <property name="password" value="${jms.password}" /> 
</bean> 

답변

1

아래 내 구성입니다.

채널을 명시 적으로 선언하지 않으면 기본적으로 라운드 로빈 의미가있는 직접 채널이 사용됩니다.

생산자 측에서 오직 하나의 소비자 (아웃 바운드 채널 어댑터)가 있기 때문에 거기에는 pub/sub 채널 일 필요가 없습니다.

+0

감사합니다. 생산자 측에서 더 많은 소비자를 추가해야한다면 무엇을 추가해야합니까? –

+0

나는 그 질문을 이해하지 못한다. Spring 통합 관점에서 볼 때 해당 채널의 유일한 소비자는 아웃 바운드 채널 어댑터입니다. 여러 주제로 보내야하는 경우 pub 부 채널로두고 각 주제에 대한 어댑터를 추가하십시오. –

+0

죄송합니다. 다른 주제로 보내려면 프로듀서 쪽에서 어댑터를 한 개 더 추가했는지 테스트했습니다. 소비자 측에서 publish-subscribe-channel으로 변경되어 서비스 활성화자가 메시지를 소비하게되었습니다. 완벽하게 일했습니다. 큰. 다시 한번 감사드립니다. –