JMS (Java Message Service)
JMS 메시지 구조
JmsTemplate
JMS 설정
<!-- ActiveMQ 의존성 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- ActiveMQ Artemis 의존성 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-artemis</artifactId>
</dependency>
spring.activemq.broker-url:
: 브로커 URLspring.activemq.user
: 브로커를 사용하기 위한 사용자spring.activemq.password
: 브로커를 사용하기 위한 패스워드spring.activemq.in-memory
: 인메모리 브로커로 시작할지 여부 (기본값: true)spring.artemis.host:
: 브로커 호스트spring.artemis.port
: 브로커 포트spring.artemis.user
: 브로커를 사용하기 위한 사용자spring.artemis.password
: 브로커를 사용하기 위한 패스워드JmsTemplate 활용 메시지 전송
전송 주요 메소드
send 활용 메시지 전송
MessageCreator
// MessageCreator 활용 send 메소드로 메시지 전송
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createObjectMessage(order);
}
});
// 람다함수 형태로 메시지 전송 (위의 코드와 작동방식 동일)
jmsTemplate.send(session -> session.createObjectMessage(order));
도착지 객체 활용
// 도착지 객체 설정
@Bean
public Destination orderQueue() {
return new ActiveMQQueue("tacocloud.order.queue");
}
@Autowired
public JmsOrderMessagingService(..., Destination orderQueue) {
...
this.orderQueue = orderQueue;
}
...
@Override
public void sendOrder(Order order) {
jms.send(
orderQueue,
session -> session.createObjectMessage(order));
도착지 문자열 활용
@Override
public void sendOrder(Order order) {
jms.send(
"tacocloud.order.queue",
session -> session.createObjectMessage(order));
}
convertAndSend 활용 메시지 전송
@Override
public void sendOrder(Order order) {
jms.convertAndSend("tacocloud.order.queue", order);
}
메시지 변환기 구현
메시지 변환기 (MessageConvertor)
JMS 메시지 수신하기
메시지 수신 방식
수신 주요 메소드
receive
receiveAndConvert
메시지 수신 구현 예시
public class JmsOrderReceiver {
private JmsTemplate jms;
private MessageConverter converter; // 변환기
@Autowired
public JmsOrderReceiver(JmsTemplate jms, MessageConverter converter) {
this.jms = jms;
this.converter = converter;
}
public Order receiveOrder() {
Message message = jms.receive("tacocloud.queue");
return (Order) converter.fromMessage(message);
}
}
public class JmsOrderReceiver {
private JmsTemplate jmsTemplate;
@Autowired
public JmsOrderReceiver(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public Order receiveOrder() {
return (Order) jmsTemplate.receiveAndConvert("tacocloud.order.queue");
}
}
메시지 리스너
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-ampq</artifactId>
</dependency>
* RabbitMQ 브로커 위치와 인증정보 구성 속성
* ```spring.rabbitmq.addresses```: 쉼표로 구성된 리스트 형태의 RabbitMQ 브로커 주소
* ```spring.rabbitmq.host```: 브로커 호스트 (default: localhost)
* ```spring.rabbitmq.port```: 브로커 포트 (default: 5672)
* ```spring.rabbitmq.username```: 브로커를 사용하기 위한 사용자 이름
* ```spring.rabbitmq.password```: 브로커를 사용하기 위한 사용자 패스워드
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
spring.kafka.bootstrap-servers
: 초기 연결에 사용되는 하나 이상의 카프카 서버들의 위치spring.kafka.template.default-topic
: 기본 토픽