2013-06-19 5 views
1

JMS 대기열과 관련하여 질문이 있습니다.2 개의 청취자가있는 JMS 대기열

공유 대기열을 사용하는 jms 발신자/수신자를 나에게 알리는 유일한 대기열로 사용할 수있는 유일한 대기열로 구현했습니다.

내가 지금 직면하고있는 문제는 내가 처음으로 온 것처럼 나는 내 생산자로부터 보내는 메시지가 내 고객에 의해 소비 될 것이고 다른 큐로는이 큐를 공유하지 않을 것임을 확신 할 수 없다는 것입니다. . 그래서 나는 다른 애플 리케이션 메시지를 소비하고 그들은 내 소모하고 있습니다.

내 메시지를 수신하고 대기열에서 메시지를들을 수 없거나 더 많은 주제 구현이 가능한 방법이 있습니까?

아니면 내 소비자 만 선택할 수있는 식별자를 명시 적으로 설정할 수 있습니다.

내 주요 코드 :

public class AsyncReceiver implements MessageListener, ExceptionListener 
{ 
public static void main(String[] args) throws Exception 
{                   
    //create queue factory 
     factory = new TibjmsQueueConnectionFactory(serverUrl); 
     //create queue connection 
     queueConn = factory.createQueueConnection(userName, password); 
     queueConn.setExceptionListener(this); 
     //create queue session 
     session = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 

     //receive message by QueueReceiver 
     final Queue queue = session.createQueue(queueName); 
     final QueueReceiver queueReceiver = session.createReceiver(queue); 
     queueReceiver.setMessageListener(this); 
     queueConn.start ();                  
    } 

답변

1

당신은 JMS 선택기를 사용해야합니다. 모든 JMS 메시지에는 보낸 사람 측에서 시작하는 속성이 포함될 수 있습니다.

메시지 소비자는 소비하려는 메시지를 설명하는 selector - SQL 유사 명령문을 지정하는 JMS 대상 (대기열 또는 주제)에 등록 할 수 있습니다. 따라서 응용 프로그램 특정 등록 정보를 지정한 다음 관련 메시지 만 수신 할 수 있습니다.

queueReceiver = queueSession.createReceiver 아래와 같이 메시지 선택기를 사용할 수

+0

답장을 보내 주신 @AlexR에게 어떻게 답변 할 수 있습니까? 메시지 자체에 설정되어 있고 반드시 발신자와의 연결이 아닌가? Reciever에서 QueuReciever 생성시 selector가 지정됩니까? 'final QueueReceiver queueReceiver = session.createReceiver (queue, "JMS_SELECTOR");' – PMC2013

1

(responseQueue "JMSCorrelationID로 = '"+ requestMessage.getJMSCorrelationID() + "'");

여기서는 JMS 상관 ID를 사용하여 필요한 올바른 메시지를 식별합니다. 필터는 메시지 머리글 및 메시지 속성에서만 작동합니다. 메시지 내용에는 작동하지 않습니다. 메시지 헤더 & 속성에

상세 사항 : http://docs.oracle.com/javaee/1.4/tutorial/doc/JMS4.html#wp79367

당신이 메시지 내용을 기준으로 필터링해야하는 경우 QueueSession.MANUAL_ACKNOWLEDGE 모드를 사용하여 원하는 메시지를 인정해야 할 수도 있습니다. 이 경우 응용 프로그램에는 내용을 기반으로 메시지를 식별하는 논리가 있어야합니다. 그래도 이상적인 디자인은 아닙니다.

+0

감사합니다. @ SMS Krishnan, 당신이보기에 관해서는 이것이 실제로 초기화 중일 때 requestMessage.getJMSCorrelationID()를 어떻게 알 수 있습니까? 이것을 설정하기 위해 게시자 측에서 anyting합니까? – PMC2013