2013년 11월 7일 목요일

Starting Java Message System

Start Java Message System

Message Oriented Middleware(MOM)
분산 시스템 간 메시지를 주고 받는 기능을 지원하는 소프트웨어나 하드웨어 인프라를 말한다. 메시지는 비 동기적으로 전송된다. 아래 그림과 같이 MOM 이 중간에서 Message를 받아두었다가 Receiver가 접속을 하면 Message를 전달하는 방식으로 이루어진다.


[Message System의 architecture]



What is JMS?
JMS(Java Message System)는 Java Enterprise Edition에 포함되어 있으며, JMS는 둘 이상의 클라이언트 간에  Message을 Sending, receiving 하는 모든 것에 대해 기술하고 있다. JMS API는 loosely coupled하고 asynchronous하게 Message 교환이 가능하게 해준다. 비동기적 의미를 내포하고 있는 UDP 통신개념의 MailSystem과 유사하지만 Component간 통신이라는 점에서 다르다.
Messaging System의 경우 JMS API뿐 아니라 C와 같은 Non-Java AP를 위한 Lib Code를 제공하는 경우가 있는데 이런 경우에는 Java Application이 아닌 다른 언어로 개발된 Application과도 호환이 되기 때문에, JMS기반의 Messaging 시스템은 Mainframe이나 다른 Application들과 Java Application을 연동하는데 많이 사용이 되며, 근래에 많이 출시되는 EAI솔루션도 JMS를 이용하는 경우가 많다.


Feature of JMS
AP A와 AP B가 통신을 한다고 했을때, 통신하는 방법은 방식에 따라 data-centric이냐, interface-centric이냐로 분리될 수 있다. RMI, IIOP, SOAP 또는 직접 TCP Packet을 정의하여 socket으로 통신하는 방식은 interface-centric이라고 한다. 데이타를 보내는 Sender에서 데이타를 보내게 되고, receiver는 어떤 데이타 형이 올지를 알고 있다. (데이타 타입이 서로 약속되어 있다.) 그리고 sender는 recevier로 부터 어떤 데이타를 받을 것인지를 알고 있고, 그 데이타가 올때까지 기다리는 게 일반적인 흐름이다. 즉 서로 통신을 하는 AP들이 데이터 형이나 동작 방법에 대해서 알고 있는 경우가 된다. 그러나 JMS의 경우 data-centric 모델로, sender는 데이타를 보내기만 한다. Receiver가 data를 받았건 말건, 내지는 receiver의 수가 얼마가 되었는지는 상관하지 않는다. JMS에서는 sender는 JMS의 Messaging System에 데이타를 보내기만 한다. Receiver는 이렇게 Messaing System에 보내진 데이타를 중계해서 받는다. 이때 데이타 형은 미리 정해져 있지 않다. (물론 데이타를 받은 다음에는 알맞은 형으로 casting해야 된다. 그러나 데이타형을 몰라도 데이타를 받는 것 자체에는 문제가 없다.) 즉 메세지를 주고 받는데에 sender와 receiver간의 약속이 필요하지 않다.


Asynchronous messaging
기본적으로 JMS Messaging 시스템은 Async 방식의 Messaging을 지원한다. Interface-centric의경우, data 를 send하면 ack를 받거나 return 값을 받을 때까지 sender는 waiting을 하게 된다. Receiver역시, 계속 sender로 부터 데이타가 오기를 기다린다. 이런 통신 방식은 sync 방식이라 한다. 그러나 Async방식은 sender는 일단 message 시스템에 데이타를 보낸다. Receiver가 받았는지 여부를 확인할 필요 없이, sender는 계속해서 메세지를 보내고, 메세지를 다 보냈으면 작업을 중단한다. Receiver는 sender로 부터 데이타가 오기만을 기다리는게 아니라, 필요할 때, message 시스템에 저장되어 있는 (sender로 부터 보내진) 메시지만 꺼내서 바로 사용하면 된다. 즉 sender와 receiver의 message 전송작업이 동시에 일어나지 않게 된다.


Reliable and unreliable messaging
앞에서 설명했듯이 JMS는 sender가 receiver의 상태에 상관없이 message를 무조건 보낸다고 설명했다. 여기서 집고 넘어가야 할 것이 그럼 어떻게 sender가 보낸 메시지가 receiver에 도착했는지를 보장할 수 있느냐는 것이다. (네트워크 문제나 기타 문제로 메세지가 유실 될 수 있다. ) 이건 JMS Messaging 시스템이 보장해준다. Reliable Messaging의 경우, sender가 데이타를 보냈으면 시스템이 중간에 다운되더라도, sender가 보낸 메세지는 receiver에게 도착할 수 있도록 보장한다. 이런 Reliable Messaging은 회사간 거래에서 중요한 데이타를 전송하는 모델 등에유용하게 사용될 수 있다. 그 밖에 실시간 데이타 처럼 신뢰성이 중요하지 않고 메세지가 전송되는 것이 중요하다면 unreliable Messaging을 이용하여, 별도의 보장 없이 메세지를 빨리 전송하는데 만 초점을 맞출 수 있다.


Message System에는 크게 2가지 방식
1. PTP(Peer-To-Peer)방식
PTP방식은 Sender와 Receiver가 Queue를 이용해서 Message를 주고 받는 형태이다. 또한 이 방식은 Sender가 보내는 Message는 오로지 한 Receiver만 받게 되어 있다. 그림처럼 Messaging Server는 Queue를 가지고 있어 Sender가 보낸 Message를 보관하고 있고, Receiver는 원하는 시간에 Message를 가져갈 수 있다. 이 때, Receiver는 Message Server에게 Message를 잘 받았다는 ACK신호를 보낸다.


[PTP Message System Architecture]


2. Pub/Sub (Publisher-Subscriber)방식
Pub/Sub 방식은 Message를 받고 싶어하는 Subscriber들은 원하는 Topic에 등록한다. 그림처럼 Publisher는 Messaging Server가 가지고 있는 해당 Topic에 Message를 보내며, Messaging Server는 Topic에 등록되어 있는 Subscriber들에게 Message를 전달하는 구조이다.


[Sub/Pub Message System Architecture]


Point to Point
Publisher/Subscriber
Each message has only one consumer.
Each message can have multiple consumers.
Messages are first send to the destination named Queue.
Messages are first published in the destination called Topic.
A sender and a receiver of a message have no timing dependencies. the receiver can fetch the message whether or not it was running when the client sent the message.
Publishers andsubscribers have a timing dependency. A client that subscribs to a topic ca nsonsume only messges published after the client has created subscription, and the subscriber must continue to be active in order for it to consume messages.
The receiver acknowledges the successful processing of a message.
Does not provide accknowledgement.


Request-Reply Messaging
추가 필요.


JMS 구성 요소
  • JMS provider
JMS Interface for a Message Oriented Middlewar의 구현체
  • JMS client
message을 produce, receive 하는 어플리케이션 또는 프로세스
  • JMS producer/publisher
message을 create하고 send 하는 JMS Client
  • JMS consumer/subscriber
message을 receive하는 JMS Client
  • JMS message
JMS Client 사이에 전송되는 데이터에 포함된 Object
  • JMS queue
message가 MOM에 전달된 후 only one consumer에 의해 read되는 형태.
  • JMS topic
delivered to multiple subscribers.


Provider implementations

  • Apache ActiveMQ
  • Oracle Weblogic and Oracle AQ from Oracle
  • EMS from TIBCO
  • JBoss Messaging and HornetQ from Jboss
  • Open Messge Queue, from Oracle
  • OpenJMS, from The OpenJMS Group
  • RabbitMQ by Rabbit Technologies Ltd., acquired by SpringSource
  • WebSphere MQ

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...