보스 시리즈 여든네 : 오해를 사용하면 JMS 세션

개요

우리는 일반적으로, 프로듀서를 만들 소비자를 만들거나 대기열에서 메시지를 사용하는 큐에 메시지를 보내, JMS 세션 연결 JMS 메시지 큐를 사용 BaseJMSTaskServer.java가 시작 () 메소드 예입니다주의 BaseJMSTaskServer.java는 관련 JMS API를 사용하여 다음과 같습니다 :

import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.Session;

는 JMS 표준 설계에 따르면, 단일 스레드를 사용하도록 설계되었습니다 이러한 API, 우리는 단일 스레드로 생성을 닫습니다. 실수가 많은 사람들이 밖으로 작업을 무시하고, 여러 스레드의 동시 사용 후 JMS 세션을 만들고, 그러한 사용이 잘못되었습니다. 나에게 다음 두 예제를주고, 오류를 방지하는 방법을, 아래에 정의 된 관련 JMS 사양을 골라 보자.

JMS 사양

JMS 세션 개체는 단일 스레드이고 단지를 만들어 단일 스레드를 사용할 수 있습니다. 다른 스레드에서이를 사용하려는 시도에는 예외 또는 아주 이상한 오류가 발생할 것입니다.

(A)의 전형적인 예

JMS 방법에서 제공하는 jBPM이 태스크 서비스와 상호 작용하는 (jBPM을 휴먼 타스크에 대한 심층적 인 이해 - 미디어 실행 작업 인간 전송 않는 JMS를 사용하여), JMSTaskClientConnector.java는 타사 프로그램에 사용되는 사용, 싱글의 사람들이 디자인의 JMSTaskClientConnector 예제를 많이, 더 동시 사용 JMSTaskClientConnector 스레드, 오류 원인에 jBPM의 결과가 제대로 작동하지 않습니다.

디의 전형적인 예

봄은 많은 사람들이있어서, 스프링의 JMS JMS의 캡슐화를 제공 JmsTemplate의 사용은 또한 오류가있는 것입니다 다음과 같이 일반적인 오류는 다음과 같습니다

for(;;){
...
.getJmsExecuteTemplate().sendQueueString("XXXX");
...
}

응용 프로그램 예외가 발생하지 않도록이 또한 JMS 세션이 발생 동시 사용 연결됩니다.

실수를 피하십시오

javax.jms.ServerSessionPool의 인터페이스가 JEE 용기에 제공되어, JEE 컨테이너는이 인터페이스를 구현하고, 개구 섹션 ServerSessionPool 실현 사용하여 JEE 컨테이너를 배포하는 이러한 메시지 구동 빈으로 동시 멀티 스레딩 시나리오를 고려하고, 그 계정 보안 쓰레드 고려한 등등.
그래서 오해를 방지 할 수있는 방법 JEE 컨테이너 처리로 동시 요청, 매우 간단합니다, 또는 스레드 안전 고려 사항을 완료하기 위해, 자신의 javax.jms.ServerSessionPool을 실현.

HTTPS : //my.oschina.net/iwuyang/blog/197157 재현

추천

출처blog.csdn.net/weixin_34050427/article/details/91897322