learn/messaging service

Java Message Service (JMS)

사겅이 2023. 9. 26. 02:03

출처 : https://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html

 

비동기식 메시지 통신을 지원하는 API로써 애플리케이션 간에 데이터를 효과적으로 교환하고 통신

 

  • Producer는 메시지를 생성하고, Queue 또는 Topic에 보냄
  • Consumer는 메시지를 받아서 처리

 

Topic 사용

출처 : https://docs.oracle.com/cd/E19509-01/820-5892/ref_jms/index.html

import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;

public class JMSQueueTest {
    public static void main(String[] args) {
        try {
            // JMS 연결 설정
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // 세션 생성
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Queue queue = session.createQueue("myQueue");

            // 메시지 송신
            MessageProducer producer = session.createProducer(queue);
            TextMessage message = session.createTextMessage("Hello, JMS Queue!");
            producer.send(message);

            // 메시지 수신
            MessageConsumer consumer = session.createConsumer(queue);
            Message receivedMessage = consumer.receive();
            if (receivedMessage instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) receivedMessage;
                System.out.println("Received message: " + textMessage.getText());
            }

            // 연결 종료
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

Queue 사용

출처 : https://docs.oracle.com/cd/E19509-01/820-5892/ref_jms/index.html

import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;

public class JMSTopicExample {
    public static void main(String[] args) {
        try {
            // JMS 연결 설정
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // 세션 생성
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Topic topic = session.createTopic("myTopic");

            // 메시지 송신
            MessageProducer producer = session.createProducer(topic);
            TextMessage message = session.createTextMessage("Hello, JMS Topic!");
            producer.send(message);

            // 메시지 수신
            MessageConsumer consumer = session.createConsumer(topic);
            Message receivedMessage = consumer.receive();
            if (receivedMessage instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) receivedMessage;
                System.out.println("Received message: " + textMessage.getText());
            }

            // 연결 종료
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}