JMS 기능은 몇 이것을 지원
가 먼저 JMSCorrelationID로는 응답 요구를 연관시키는 데 사용되는 JMS 헤더이다. 나는. 각 메시지에는 GUID (Globally Unique) JMSMessageId가 있습니다. 메인 프레임 응용 프로그램은 요청의 메시지 ID를 응답 메시지의 JMSCorrelationId로 복사하고 공유 응답 큐로 다시 보내야합니다. 여러 소비자 스레드 (또는 응용 프로그램) 소비자의 선택기입니다 수 있도록
(psuedo code - in one thread, do the following when you need to request data over JMS)
myMessage = session.createTextMessage("My nice request");
messageProducer.send(myMessage); // using some previously setup producer
// commit if needed
mc = session.createConsumer(queue,"JMSCorrelationId='"+myMessage.getMessageId()+"'");
responseMessage = mc.receive(TIMEOUT);
if(responseMessage != null){
//got OUR response data
}
// close down consumer here.
트릭 :
그래서 간단하여 요청을 보냅니다. JMS 선택기는 SQL 또는 유사한 쿼리 언어의 하위 집합과 유사합니다. 이 경우 JMSCorrelationId가 요청의 ID와 동일한 시간대로 메시지를 선택하십시오.
이것은 하나의 고정 된 공유 대기열이 있고 요청이 요청 된 바로 그 스레드로 돌아와야한다는 조건으로 할 수있는 유일한 "안전한"설정입니다.
JMS Selector의 오버 헤드를 피하려면 응답마다 임시 대기열을 사용할 수 있습니다. 요청 당 하나의 임시 대기열이 있으면 특정 응답을 수신하는 다른 스레드가 없습니다. 성능을 얻는 또 다른 옵션은 응용 프로그램을 비동기로 만드는 것입니다. JMS는 실제로이를 촉진하고 요청을 해고 소비자 스레드 풀이 비동기 응답을 처리하도록합니다. 각 스레드는 데이터를 처리하고 데이터베이스 (또는 이와 유사한)에 넣는 등 모든 응답을 처리 할 수 있습니다. 나는이 디자인 패러다임이 당신의 사건에 적용 가능한지 모르지만, 적어도 그것에 대해 알고 있어야합니다.
아마도 http://docs.oracle.com/javaee/5/tutorial/doc/bncdx.html 또는 http://my.execpc.com/~gopalan/jms/jms.html을 읽고 싶을 것입니다. 다른 단어를 사용하여 문서를 설명 할 필요가 없습니다. 그들은 그것이 작동하는 방법을 설명하는 정말 좋은 회로도가 있습니다. ptp 및 psm 메시징 유형에 대해 읽어보십시오. 감사. –