2017-05-03 10 views
0

스프링 JMS를 사용하여 WSO2MB 서버에 연결합니다. 모든 것이 잘 작동하지만 모든 청취자에게는 같은 ID가 할당됩니다. 고유하게 만들기 위해 clientId를 제공했지만 작동하지 않습니다. 나는 그 이름을 제공 할 수있는 다른 분야를 찾지 못하고있다.스프링 jms 토픽에서 할당 이름

JMS Listener에도 id를 제공했지만 성공하지는 못했습니다.

@Bean 
@ConditionalOnProperty(name="my.listener.active", matchIfMissing = true) 
public JmsListenerContainerFactory jmsListenerContainerFactory(@Qualifier("listenerConnectionFactory") ConnectionFactory connectionFactory) throws URLSyntaxException { 
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); 
    factory.setConnectionFactory(connectionFactory); 
    factory.setClientId("listener"+listenerTopic); 
    if (Boolean.valueOf(listenerTopic)) { 
     factory.setSubscriptionDurable(true); 
     factory.setPubSubDomain(true); 
    } 
    return factory; 
} 

@JmsListener(destination = "${default-queue-name-to-listen}", id = "${default-queue-name-to-listen}") 
public void receiveMessage(final Message<T> message) throws JMSException { 
} 
+0

응용 프로그램을 다시 시작한 후에 동일한 ID를 사용해야합니까 ?? 이게 문제 야. "listener"+ listenerTopic + System.currentTimeMillis()를 추가 할 수 없다면 –

+0

각 서비스에 대해 동일한 이름을 원하므로 여러 인스턴스가 실행중인 경우에도 동일한 이름을 공유합니다. 하지만 다른 서비스는 다른 이름을 가져야합니다. – krmanish007

답변

0

사용하는 것입니다 내 문제를 해결했습니다

@JmsListener(
     destination = "${default-queue-name-to-listen}", 
     subscription = "${default-queue-name-to-listen}" 
    ) 
    public void receiveMessage(Message<T> message) throws JMSException {} 
0

각 연결은

가에 사용하는 JMS 클라이언트 ID 설정 (문자열 된 ClientID) 고유 clientID

무효 org.apache.activemq.ActiveMQConnectionFactory.setClientID이 필요합니다 생성 된 연결. 이것은 단지 그것의 더 나은 아이디어가

솔루션 Connection로 클라이언트 ID를 설정 한때 일반적으로 에 하나 개의 연결을 사용할 수 있다는 참고 가입 이름이 연결 이름이 고유하게 org.springframework.jms.connection.SingleConnectionFactory

+0

이미 clientId를 설정하고 있습니다. factory.setClientId ("listener"+ listenerTopic); – krmanish007

+0

예 그러나 둘 이상의 연결을 만드는 경우이 작업은 실패하지만 SingleConnectionFactory는 하나의 연결 만 만들고 SingleConnectionFactory.setClientId ("listener"+ listenerTopic); –

+0

좋아, 나는 그것을 어떻게 사용할지 모르겠지만, 내가 도커를 사용하고 여러 인스턴스가 여전히 각각의 인스턴스를 생성하므로 영향을 미칠지는 모르겠다. 현재 일부 서버 문제가 있으므로 한 번 해결하면 해결할 것입니다. 감사합니다 – krmanish007