JMS API 프로그래밍 모델
JMS 애플리케이션의 기본 구성 요소는 다음과 같습니다:
1. 관리 객체: 연결 팩토리와 대상
2. 연결 (Connections)
3. 세션 (Sessions)
4. 메시지 프로듀서 (Message Producers)
5. 메시지 소비자 (Message Consumers)
6. 메시지 (Messages)
다음 섹션은 각 구성 요소를 간단히 설명하고 코드 예제를 통해 생성 및 사용 방법을 보여줍니다.
JMS 관리 객체 (Administered Objects)
JMS 애플리케이션의 두 가지 주요 관리 객체는 **대상(Destination)**과 **연결 팩토리(Connection Factory)**입니다. 이 객체들은 일반적으로 프로그래밍이 아닌 관리적 방식으로 유지 관리됩니다. JMS API는 다양한 구현이 가능하므로, 이러한 객체 관리는 각 공급자마다 다를 수 있습니다.
JMS 클라이언트는 JNDI(Java Naming and Directory Interface)를 통해 이러한 객체에 접근하며, 보통 자바 EE 애플리케이션에서는 리소스 주입을 통해 접근합니다.
연결 팩토리 (JMS Connection Factories)
연결 팩토리는 클라이언트가 공급자에 연결하기 위해 사용하는 객체입니다. 이 객체는 관리자에 의해 구성된 연결 설정 파라미터를 캡슐화합니다. 보통 자바 EE 애플리케이션에서 @Resource 애너테이션을 통해 연결 팩토리 리소스를 주입합니다.
대상 (JMS Destinations)
대상은 클라이언트가 메시지를 보내거나 받을 때 사용하는 객체입니다. PTP (Point-to-Point) 방식에서는 **큐(Queue)**라 불리며, Pub/Sub (Publish/Subscribe) 방식에서는 **토픽(Topic)**이라 불립니다. 대상은 특정 도메인에 종속적이며, 자바 EE 애플리케이션에서 JNDI 이름을 통해 설정합니다.
JMS 연결 (JMS Connections)
연결 객체는 JMS 공급자와의 가상 연결을 캡슐화합니다. 예를 들어, 클라이언트와 서비스 데몬 간의 TCP/IP 소켓 연결을 나타낼 수 있습니다. 연결을 통해 하나 이상의 세션을 생성할 수 있습니다.
Connection connection = connectionFactory.createConnection();
connection.close();
JMS 세션 (JMS Sessions)
세션은 단일 스레드의 메시지 생성 및 소비를 위한 컨텍스트입니다. 세션을 통해 메시지 프로듀서, 메시지 소비자, 메시지 등을 생성할 수 있습니다.
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
JMS 메시지 프로듀서 (JMS Message Producers)
메시지 프로듀서는 특정 대상에 메시지를 보내기 위해 세션에 의해 생성되는 객체입니다. 메시지 프로듀서는 MessageProducer 인터페이스를 구현하며, send 메서드를 통해 메시지를 보냅니다.
MessageProducer producer = session.createProducer(dest);
producer.send(message);
JMS 메시지 소비자 (JMS Message Consumers)
메시지 소비자는 세션에 의해 생성되어 특정 대상으로부터 메시지를 수신하는 객체입니다. MessageConsumer 인터페이스를 구현하며, receive 메서드를 사용해 동기식으로 메시지를 소비하거나 메시지 리스너를 사용해 비동기식으로 메시지를 수신할 수 있습니다.
MessageConsumer consumer = session.createConsumer(dest);
Message m = consumer.receive();
JMS 메시지 리스너 (JMS Message Listeners)
메시지 리스너는 비동기 이벤트 핸들러 역할을 하며 MessageListener 인터페이스를 구현하는 객체입니다. 메시지가 도착할 때마다 onMessage 메서드를 호출합니다.
consumer.setMessageListener(new MyMessageListener());
JMS 메시지 선택기 (JMS Message Selectors)
메시지 선택기를 사용하여 특정 메시지를 필터링하여 수신할 수 있습니다. 예를 들어, 특정 NewsType 속성 값에 따라 메시지를 선택할 수 있습니다.
JMS 메시지 구조
JMS 메시지는 다음과 같은 세 가지 부분으로 구성됩니다:
1. 헤더: 메시지 라우팅 및 식별 정보 포함
2. 속성: 추가 정보 저장
3. 본문: 메시지 내용
JMS 큐 브라우저 (JMS Queue Browsers)
큐 브라우저는 큐에 있는 메시지를 검토할 수 있게 해주는 객체입니다. 이를 통해 큐에 있는 메시지의 헤더를 확인할 수 있습니다.
JMS 예외 처리
JMS API 메서드에서 발생하는 예외의 최상위 클래스는 JMSException입니다. 이 예외 클래스를 상속한 다양한 하위 클래스가 존재하며, 각 예외 상황에 따라 다르게 처리할 수 있습니다.
이와 같이 JMS API는 다양한 구성 요소를 통해 메시지 전송, 수신, 필터링 및 예외 처리를 지원하며, 자바 애플리케이션에서 메시지 기반의 비동기 통신을 구현하는 데 매우 유용합니다.
'Microservices Architecture' 카테고리의 다른 글
Amazon EC2, SC3 (9) | 2024.11.08 |
---|---|
Kafka의 Source, Target, Topic, Partition (1) | 2024.11.07 |
Kafka의 Lag와 Burrow (0) | 2024.11.07 |
Kafka의 Broker, Replication, ISR (In-Sync Replica) (1) | 2024.11.07 |
Kafka의 Producer와 Consumer (0) | 2024.11.07 |