Message Queue 클라이언트는 연결 이벤트 알림을 통해 닫힘 및 다시 연결 이벤트를 수신하고 알림 유형 및 연결 상태를 기반으로 적절한 작업을 수행할 수 있습니다. 예를 들어, 페일오버가 발생하고 클라이언트가 다른 브로커에 다시 연결된 경우 응용 프로그램은 해당 트랜잭션 상태를 정리하고 새 트랜잭션으로 작업을 계속하려 할 수 있습니다.
Message Queue 공급자가 연결에서 심각한 문제를 감지한 경우에는 연결 객체의 등록된 예외 수신기를 호출한 후 이 수신기의 onException 메소드를 호출하고, 문제를 설명하는 JMSException 인수를 이 메소드에 전달합니다. 또한 Message Queue 공급자는 클라이언트 런타임이 연결 상태 변경 사항을 응용 프로그램에 알릴 수 있도록 해주는 이벤트 알림 API를 제공하기도 합니다. 알림 API는 다음 요소로 정의됩니다.
이벤트 수신기 및 알림 이벤트 객체를 정의하는 com.sun.messaging.jms.notification 패키지
javax.jms.Connection 인터페이스에 대한 확장을 정의하는 com.sun.messaging.jms.Connection 인터페이스
다음 절에서는 알림을 트리거할 수 있는 이벤트에 대한 정보와 이벤트 수신기를 만들 수 있는 방법에 대해 설명합니다.
다음 표에서는 이벤트 수신기에서 반환할 수 있는 이벤트를 나열하고 설명합니다.
연결 이벤트가 발생한 경우에는 JMS 예외 수신기가 호출되지 않습니다. 이 예외 수신기는 클라이언트 런타임이 다시 연결 시도를 모두 소진한 경우에만 호출됩니다. 클라이언트 런타임은 항상 예외 수신기보다 이벤트 수신기를 먼저 호출합니다.
표 1–8 알림 이벤트
이벤트 유형 |
의미 |
---|---|
ConnectionClosingEvent |
Message Queue 클라이언트 런타임이 관리자의 종료 요청으로 인해 연결이 닫히려고 하는 브로커에서 알림을 수신한 경우 이 이벤트를 생성합니다. |
ConnectionClosedEvent |
브로커 오류나 관리자의 종료 또는 다시 시작 요청으로 인해 연결이 닫힌 경우 Message Queue 클라이언트 런타임이 이 이벤트를 생성합니다. 이벤트 수신기가 ConnectionClosedEvent를 수신한 경우 응용 프로그램은 수신된 이벤트의 getEventCode() 메소드를 사용하여 연결이 닫힌 원인을 지정하는 이벤트 코드를 가져올 수 있습니다. |
ConnectionReconnectedEvent |
Message Queue 클라이언트 런타임이 브로커에 다시 연결되었음을 나타냅니다. 이는 이전에 클라이언트에 연결되었던 동일한 브로커이거나 다른 브로커일 수 있습니다. 응용 프로그램은 수신된 이벤트의 getBrokerAddress 메소드를 사용하여 다시 연결된 브로커의 주소를 가져올 수 있습니다. |
ConnectionReconnectFailedEvent |
Message Queue 클라이언트 런타임을 브로커에 다시 연결하지 못했음을 나타냅니다. 다시 연결 시도에 실패할 때마다 런타임은 새 이벤트를 생성하고 이를 이벤트 수신기에 전송합니다. 연결 이벤트가 발생한 경우에는 JMS 예외 수신기가 호출되지 않습니다. 이 예외 수신기는 클라이언트 런타임이 다시 연결 시도를 모두 소진한 경우에만 호출됩니다. 클라이언트 런타임은 항상 예외 수신기보다 이벤트 수신기를 먼저 호출합니다. |
다음 코드 예는 연결 이벤트 수신기를 설정하는 방법을 나타냅니다. 연결 이벤트가 발생할 때마다 클라이언트 런타임에 의해 이벤트 수신기의 onEvent 메소드가 호출됩니다.
//create an MQ connection factory. com.sun.messaging.ConnectionFactory factory = new com.sun.messaging.ConnectionFactory(); //create an MQ connection. com.sun.messaging.jms.Connection connection = (com.sun.messaging.jms.Connection )factory.createConnection(); //construct an MQ event listener. The listener implements //com.sun.messaging.jms.notification.EventListener interface. com.sun.messaging.jms.notification.EventListener eListener = new ApplicationEventListener(); //set event listener to the MQ connection. connection.setEventListener ( eListener );
이 예에서 응용 프로그램은 해당 이벤트 수신기가 연결 이벤트를 응용 프로그램의 로깅 시스템에 기록하도록 선택합니다.
public class ApplicationEventListener implements com.sun.messaging.jms.notification.EventListener { public void onEvent ( com.sun.messaging.jms.notification.Event connEvent ) { log (connEvent); } private void log ( com.sun.messaging.jms.notification.Event connEvent ) { String eventCode = connEvent.getEventCode(); String eventMessage = connEvent.getEventMessage(); //write event information to the output stream. } }