'기초'에 해당되는 글 2건

  1. 2013.09.24 자바 테스트를 위한 질문 정리
  2. 2013.05.15 Java Message Service API 2

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

1. Java Message Service(JMS) 소개

Java Message Service(JMS) API는 두개 또는 그 이상의 클라이언트 간에 메세지를 주고 받을 수 있도록 하는 Java Message Oriented Middleware(MOM) API 이다. 


JMS는 Java Platform, Enterprise Edition의 한 부분이며, Java Enterprise Edition(JEE) 기반의 애플리캐이션 컴퍼넌트들 간의 메세지를 생성하고, 전송하고, 전송받고, 읽는 기능을 사용할 수 있게 한다. 분산 처리 시스템에서 다른 컴포넌트 간의 느슨한 결합(Loosely coupled)과 신뢰성있으며, 그리고 비동기적으로 통신할 수 있게 해준다.


메세지 서비스를 제공하는 MOM 시스템에 JMS API를 이용해 접근할 수 있으며, 이를 통해 컴퍼넌트간에 통신을 할 수 있게 만들 수 있는 것이다. 즉, 소프트웨어 애플리케이션 또는 소프트웨어 컴포넌트들 간의 통신 방법을 정의해 놓은 것이다.


Component <-> JMS <-> Component


JMS는 서로 연결된 다양한 컴포넌트 사이에서 다른 컴포넌트가 갖고 있는 자원을 사용할 수도 있고, 네트워크가 연결되지 않은 상태에서도 메세지를 이용하여 필요한 업무를 요청할 수 있다.

2. JMS 사용시 고려 사항

어떤 상황에서 JMS를 사용할 수 있을까? 다음 상황을 고려해 보자.


- 다른 컴포넌트의 인터페이스 정보에 의존하지 않고 컴포넌트가 쉽게 변경되는 서비스를 원할 때

-> RMI와 같은 서비스를 이용해 컴포넌트끼리 통신하려면 인터페이스 정보를 알아야 한다. 또한 인터페이스가 변경 되면 모두 재컴파일 해야 하는 문제가 있다.

- 동시에 모든 애플리케이션이 작동하고 있는 상황에서 특정 애플리케이션이 작동하기를 원할 때

-> 특정 애플리케이션에게만 통신을 하려고 할때이다.

- 애플리케이션 비즈니스 모델을 사용하는 컴포넌트가 다른 곳으로 정보를 전달하고, 바로 응답을 받지 않은 상태에서도 계속 작동하는 것을 원할 때

-> 메소드를 이용해 다른 컴포넌트를 호출하면 반환값을 확인할 때까지 멈춰 있어야만 하는데, 다른 컴포넌트에 메세지만 보내고, 처리 상황에 대해 알지 않아도 될때를 말한다.


3. 구성 요소

- JMS provider

Message Oriented Middleware(MOM)을 위한 JMS 인터페이스 구현체이다. JAVS JMS 구현체 또는 non-java MOM을 구현하고 있다.

- JMS client

- JMS producer/publisher

- JMS consumer/subscriber

- JMS message

- JMS queue

- JMS topic

여러 구독자들(subscribers)에게 메세지를 전달할 수 있는 분산 메카니즘

4. Models

- Point-to-point model

메세지를 지정된 큐(Queue)로 전달하고 큐로부터 메세지를 전달받는 형식이다. 각각의 메세지는 오직 하나의 소비자(consumer)에게 전달된다. 


- Publish/subscribe model

메세지를 지정된 토픽(Topic)으로 전달하고 해당 토픽을 구독하고 있는 독자들에게 메세지가 전달받는 형식이다. 토픽인 큐처럼 클라이언트 에게서 메세지를 전달받으면 가지고 있다가 다른 여러 클라이언트에게 메세지를 전달할 수 있다. 


이 모델은 여러 게시판이 있고, 그 게시판에 글을 쓰면 다양한 사람이 글을 읽을 수 있는 게시판 구조랑 비슷하다. 각각의 게시판은 토픽(Topic)이 되고 게시글들은 메세지(message)가 된다.

-> JMS api는 각 모델에 상관없이 메시지를 보낸 쪽과 받는 쪽에서 모두 같은 코드를 사용할 수 있도록 공통 인터페이스를 가지고 있다.


5. JMS Object

- Administered Object

1) Connection Factory

클라이언트가 JMS 서비스에 연결하기 위한 커넥션을 생성할 때 사용하는 객체

2) Destination

생성된 메세지가 저장되는 저장소로 그리고 메세지가 소비되는 곳으로 사용되는 객체


- Connection

JMS Provider를 이용한 가상의 커넥션을 캡슐화한 객체. 사용하고 나면 close 메소드를 호출해 닫아야 한다. 커넥션은 클라이언트와 Provider 사이에 통신을 하며, 개발자는 커낵션을 이용해 세션(Session)을 생성할 수 있다.

- Session

메세지를 생성하고 소비하는 단일 스레드 단위이며, 트랜젝션 기능을 제공한다.


- Message Producer

목적지에 메시지를 전달하는 역할을 하는 객체로, 세션 객체를 통해 생성한다.

- Message Consumer

목적지에 전달된 메시지를 전달받는 역할을 하는 객체로, 메세지 생산자(Message producer)와 같이 세션 객체를 통해 생성한다.

1) Message Listener

이벤트 핸들러로 비동기식으로 메시지를 전달 받을 때 사용하는 객체로, 메세지 소비자(Message Consumer)에 등록해서 메세지가 전송됐을 때만 처리할 수 있게 해준다.

2) Message Selector

전달 받은 메세지를 필터링 할 필요가 있을때 사용하는 객체로, 메세지 소비자를 생성할때 매개 변수로 메세지 셀렉터를 지정하여 사용한다. 셀렉터를 사용하면 메세지의 헤더(Header)와 프로퍼티(Property)가 일치하는 메세지만 전달 받을 수 있다.


- Message

다른 클라이언트에서 메세지를 보내고, 받아 사용할 수 있도록 사용하는 객체로, non-java MOM에서도 사용할 수 있는 구조를 가지고 있다. 메세지는 헤더, 프로퍼티, 보디로 구성되며, 헤더는 필수로 지정되어야 한다.

1) Message Header

JMS클라이언트와 JMS 제공자(Provider)가 메세지를 확인하고 전달하기 위해 사용하는 값을 가지고 있다.

2) Message Property

헤더에서 제공하는 정보 외에 추가로 필요한 정보가 있을때 사용한다.

3) Message Body

다양한 데이터 타입을 지정해 보낼 때 사용한다. 메시지는 다음 종류가 있다.

-> Text message

-> Map Message

-> Bytes Message

-> Stream Message

-> Object Message


-Exception Handling


6. 예제

-> 추후 작성 


7. 글쓴이 요약

JMS API는 MOM 서비스(Message를 저장하고 보내주는 서비스)에 연결하는 도구이며, 실제 JMS를 쓰기 위해서는 MOM이 시스템 JDNI에 등록되어 있어야 하고, 이를 검색해서 JMS API를 이용해 컴포넌트 간에 메세지를 보내고, 받을 수 있는 식이다.

현재 프로젝트에서 쓰고 있는 예를 보니 이메일 알림 기능을 JMS를 이용해 구현해 사용하고 있다. MOM의 경우 Active MQ를 사용하고, MOM을 스프링 프레임웍에 접근이 가능하도록 등록 한후 내부적으로 JMS API를 메세지를 처리하는 방식으로 사용하고 있다.


8. Reference

Java Message Service
http://en.wikipedia.org/wiki/Java_Message_Service

Java Message Service Tutorial
http://docs.oracle.com/javaee/1.3/jms/tutorial/index.html


9. 별첨

Message-oriented middleware(MOM)은 분산 시스템 사이에 메시지를 보내거나 받을 수 있는 소프트웨어 또는 하드웨어이다.

예를 들어 특정 서비스를 제공하는 소프트웨어가 여러 플랫폼을 개발되었다고 하자. 하나는 안드로이드 어플리케이션(Java), 또 하나는 iOS(Object C) 어플리케이션이다. 그리고 서버는 C언어를 이용해 개발 되었다면, 각각의 어플리케이션은 서버와 통신을 해야만 한다. 이때 서로 통신하기 위해 사용하는 것중에 하나가 MOM인 것이다. 

MOM 프로그램에는 다음과 같은 종류가 있다. 

- SAP Process Integration ESB

- Apache ActiveMQ

- BEA Weblogic (part of the Fusion Middleware suite) and Oracle AQ from Oracle

- EMS from TIBCO

- FFMQ, GNU LGPL licensed

- JBoss Messaging and HornetQ from JBoss

- JORAM, from the OW2 Consortium

- Open Message Queue, from Oracle

- OpenJMS, from The OpenJMS Group

- Solace JMS from Solace Systems

- SonicMQ from Progress Software

- StormMQ, using AMQP

- SwiftMQ

- Tervela

- Ultra Messaging from 29 West (acquired by Informatica)

- webMethods from Software AG

- WebSphere Application Server from IBM, which provides an inbuilt default messaging provider known as the Service Integration Bus (SIBus), or which can connect to WebSphere MQ as a JMS provider[5]

- WebSphere MQ (formerly MQSeries) from IBM


'개발자 > Java Enterprise' 카테고리의 다른 글

Plain Old Java Object(POJO)  (0) 2013.05.30
Posted by 빌리 :