1. - JMS 시스템의 이해
Uajjang.com 미디어 검색팀 정경석
2012. 05 .09
2. What is JMS?
Why JMS?
Producer/Consumer
Type of JMS model
About ActiveMQ
When is the right time to use ActiveMQ?
How to use ActiveMQ?
How to monitoring in ActiveMQ?
Fault tolerance and High availability
3. JMS is Java Message Service
Standard J2EE messaging API
JMS is asynchronous in nature
Producer/Consumer pattern의 구현체
Producer, Message, Consumer로 구성됨.
Message broker system
메시지 전송 중계를 담당.
Message의 전송을 보장.
즉, JMS를 통해 전송된 메시지는 반드시 목적지에 도달함.
4. Heterogeneous application integration
Unix <-> IBM Host, Java <-> C++
이기종, 다른 언어로 작성된 Applicaion간의 업무 통
합이 가능함.
High reliability and the performance
Do not need to concern about
communication.
데이터의 통신은 JMS가 담당 하므로 개발자는 순수
하게 메시지에만 관심을 가질 수 있음
메시지 전송의 투명성을 가짐.
5. Broker(JMS)
Producer Consumer
생산자는 메시지를 만들어서 Broker에게 전송.
소비자는 Broker로 부터 메시지를 수신
즉, 메시지가 생성되어 소비하기까지의 과정을 중계하는 역할
6. Point to Point(Sender/Receiver)
하나의 메시지는 하나의 목적지로만 전달됨.
특정한 App이 메시지를 수신하도록 유도 가능.
Sender Queue Receiver 1
Receiver 2
Publish and Subscribe
하나의 메시지는 다중의 목적지로 전달됨.
모든 App이 메시지를 수신
Publisher Topic Subscriber
Subscriber
7. Most popular and powerful open source
Message Broker
Java based JMS implementation
Spring Integration with ActiveMQ
Fault tolerance(High availability)
Easy to Scale out
Supports a large number of Cross
Language Clients(C#, C++, Perl, PHP, Python,
Ruby, Delphi…)
8. RPC의 대체(Async)
Event Driven Architecture with POJOs
(Shopping)
Software적인 scalability를 보장받고자 하는 경
우(SOA)
메시지 전송의 보장이 필요한 경우(System간)
Transaction load balancing 필요한 경우
각 시스템에 동일한 메시지를 전달해야 하는 경
우(Notification)
10. Write sender application
ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory(“tcp://10.1.0.11:61616”);
Connection connection = connectionFactory.createConnection();
connection.start();
// Create the session
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(“com.jjanglive.jPush”);
// Create the producer.
producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
TextMessage textMessage = session.createTextMessage(“This is a sample message!!”);
producer.send(textMessage);
11. Write receiver application with Spring
public class SampleMessageHandler implements MessageListener {
@Override
public void onMessage(Message message) {
// do something
System.out.println(“Message Received!!!!!!!!”);
}
14. Broker down case
MQ Client MQ Client … MQ Client
Broker Agent Failover connect
Active Active Active
MQ 1 MQ 2 … MQ n
Receiver 1 Receiver 2 … Receiver n
특정 Broker가 Down된 경우 MQ Client와 Receiver는 자동으로 down을 감
지하고 살아 있는 Broker를 찾아 auto reconnect