JMS의 공유 구독

IBM® MessageSight JMS 클라이언트는 JMS 1.1 스펙의 확장으로 공유 구독에 대한 지원을 제공합니다. JMS 1.1 스펙에 대한 이 확장을 사용하는 JMS 애플리케이션을 IBM MessageSight JMS 클라이언트 구현을 통해서만 컴파일하고 실행할 수 있습니다. 클라이언트를 사용하여 지속 토픽 구독과 비지속 토픽 구독을 공유하도록 구성할 수 있습니다. 비공유 구독에서, 특정 토픽의 각 이용자는 해당 토픽 문자열에 발행된 모든 메시지의 사본을 수신합니다. 공유 구독에서는 각 메시지가 해당 토픽의 이용자 중 하나에만 전달됩니다. 이는 다중 이용자 큐에서의 메시지 공유와 유사합니다.

공유 구독은 클라이언트 ID에 바인드되거나 글로벌 네임스페이스 내에 존재할 수 있습니다. 공유 구독을 작성하거나 결합하는 데 사용되는 연결에 클라이언트 ID가 지정되면 구독이 해당 클라이언트 ID에만 바인드됩니다. 이 경우 클라이언트 ID가 구독 이름의 네임스페이스를 지정합니다. 공유 구독을 작성하거나 결합하는 데 사용되는 연결에 클라이언트 ID가 지정되지 않는 경우에는 글로벌 네임스페이스가 사용됩니다. 글로벌 네임스페이스를 사용하면 여러 연결 간에 구독을 공유할 수 있습니다. 이 구성을 사용하면 애플리케이션 서버 클러스터에서 실행되는 메시지 구동 Bean 애플리케이션의 로드 밸런싱과 같은 작업을 수행할 수 있습니다.

JMS에서 공유 구독을 작성하고 결합하기 위해 Session의 JMS 2.0 메소드와 일치하는 확장 메소드 세트를 사용할 수 있습니다. 이러한 메소드는 ImaSubscription 인터페이스에서 추가됩니다. IBM MessageSight 내에서 createSession()에 의해 리턴되는 Session 오브젝트가 ImaSubscription 인터페이스를 구현합니다.
MessageConsumer consumer;
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
consumer = ((ImaSubscription)session).createDurableConsumer(topic, subName);
consumer = ((ImaSubscription)session).createSharedConsumer(topic, subName, selector);
consumer = ((ImaSubscription)session).createSharedDurableConsumer(topic, subName, selector);

JMS 공유 구독 작성, 코드 예

다음 코드 예는 JMS 공유 구독을 작성하는 데 필요한 구성을 표시합니다.
참고: 모든 공유 구독에는 올바로 구성된 토픽 메시징 정책이 필요합니다. 글로벌 공유 지속 구독에도 올바로 구성된 구독 메시징 정책이 필요합니다.
글로벌 공유 비지속적 구독 작성
ConnectionFactory connectionFactory;
Connection connection;
Session session;
MessageConsumer consumer;
Topic topic;
String sharedSubName;
String selector = null; /* For this example, there is no selector for this subscription. */
.
.
.
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
topic = session.createTopic("theTopic");
consumer = ((ImaSubscription)session).createSharedConsumer(topic, sharedSubName, selector);
개인 공유 지속적 구독 작성
ConnectionFactory connectionFactory;
Connection connection;
Session session;
MessageConsumer consumer;
Topic topic;
String sharedSubName;
String selector = null; /* For this example, there is no selector for this subscription. */
.
.
.
connection = connectionFactory.createConnection();

/* Setting the client ID makes shared subscriptions for this connection private shared subscriptions.
 * Only consumers in this connection can access the shared subscriptions created for this connection.
 */
connection.setClientID("myClient"); 
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
topic = session.createTopic("sharedTopic");
consumer = ((ImaSubscription)session).createSharedConsumer(topic, sharedSubName, selector);
글로벌 공유 지속 구독 작성
참고: 올바른 구독 메시징 정책과 토픽 메시징 정책을 IBM MessageSight에서 구성해야 합니다.
ConnectionFactory connectionFactory;
Connection connection;
Session session;
MessageConsumer consumer;
Topic topic;
String sharedDurableSubName;
String selector = null; /* For this example, there is no selector for this subscription. */
.
.
.
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
topic = session.createTopic("theTopic");
consumer = ((ImaSubscription)session).createSharedDurableConsumer(topic, sharedDurableSubName, selector);
개인 공유 지속적 구독 작성
ConnectionFactory connectionFactory;
Connection connection;
Session session;
MessageConsumer consumer;
Topic topic;
String sharedDurableSubName;
String selector = null; /* For this example, there is no selector for this subscription. */
.
.
.
connection = connectionFactory.createConnection();

/* Setting the client ID makes shared subscriptions for this connection private shared subscriptions.
 * Only consumers in this connection can access the shared subscriptions created for this connection.
 */
connection.setClientID("myClient"); 
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
topic = session.createTopic("sharedTopic");
consumer = ((ImaSubscription)session).createSharedDurableConsumer(topic, sharedDurableSubName, selector);

JMS 클라이언트는 JMS Session.unsubscribe 메소드를 사용하여 지속적 구독의 사용을 종료합니다. 이 조치는 구독의 사용을 영구적으로 종료하고 활성 구독자가 없는 경우 구독을 삭제합니다. 활성 구독자가 있는 경우에는 이 조치에 실패하고 예외가 발생합니다. 이 경우에 적절한 예외 처리를 구현해야 합니다.

JMS 클라이언트는 JMS Session.unsubscribe 메소드를 사용하거나 이용자를 처리완료하여 비지속 구독의 사용을 종료합니다.




피드백 | 주의사항


시간소인 아이콘 마지막 갱신 날짜: 2015년 09월 02일 수요일


http://pic.dhe.ibm.com/infocenter/ism/v1r0m0/com.ibm.ism.doc/Developing/sharedsubscriptionsinjms.html