RabbitMQ - 2: 메시지 발신자
- -
이번 포스트에서는 Spring Cloud에서 RabbitMQ에 메시지를 보내는 발신자를 구성해보자.
프로젝트 구성
의존성
Spring에서 RabbitMQ를 사용한 웹 애플리케이션을 구성해보자. 의존성에는 다음을 추가한다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.quietjun</groupId>
<artifactId>rabbit</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rabbitMQ</name>
<description>Demo project for Spring Boot</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.properties
application.properties에는 접속할 RabbitMQ 서버에 대한 정보를 추가해줄 수 있는데 사실 모두 default 이므로 생략해도 무방하다.
server.port=7077
# default 내용으로 생략 가능
#spring.rabbitmq.host=localhost
#spring.rabbitmq.port=5672
#spring.rabbitmq.username=guest
#spring.rabbitmq.password=guest
기본 코드
환경 설정
RabbitMQ에 대한 기본적인 설정은 spring-boot-starter-amqp를 의존성에 추가하는 순간 거의 끝난다. 바로 auto configuration 때문이다.
https://docs.spring.io/spring-boot/appendix/auto-configuration-classes/spring-boot-amqp.html
spring-boot-amqp :: Spring Boot
Preview
docs.spring.io

MessageService
RabbitMQ에 메시지를 보내기 위해서는 RabbitTemplate를 사용한다. RabbitTemplate은 RabbitAutoConfiguration에 의해 빈으로 등록된다. 따라서 서비스에서는 빈을 주입 받고 convertAndSend 메서드를 통해 메시지를 전달하면 된다.
convertAndSend는 다음의 3가지를 파라미터로 받는다.
- String exchange: exchange 이름
- String routingKey: routing key 이름
- Object object: 전달할 메시지
package com.quietjun.example.service;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
@Service
@Slf4j
public class MessageService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendDirectMessage(String str) {
log.debug("amq.direct 보낸 메시지 : {}", str);
rabbitTemplate.convertAndSend("amq.direct", "quietjun", str);
}
public void sendFanoutMessage(String str) {
log.debug("amq.fanout 보낸 메시지 : {}", str);
rabbitTemplate.convertAndSend("amq.fanout", null, str);
}
public void sendTopicMessage(String str) {
log.debug("amq.topic 보낸 메시지 : {}", str);
rabbitTemplate.convertAndSend("amq.topic", "sports.baseball", str);
}
}
MessageSendController
다음으로 사용자의 요청을 받아 서비스를 호출하는 MessageSendController이다. 특별한 내용은 없다.
@RestController
@RequestMapping("/send")
public class MessageSendController {
@Autowired
private MessageService messageService;
@GetMapping("/direct")
public ResponseEntity<?> sendDirectMessage(@RequestParam("name") String name) {
messageService.sendDirectMessage(name+"님이 RabbitMQ 브로커에게 메시지를 보내요");
return ResponseEntity.ok(name+"님!! RabbitMQ 브로커에게 메시지(이벤트)를 보냈어요!!!🐇");
}
@GetMapping("/fanout")
public ResponseEntity<?> sendFanoutMessage(@RequestParam("name") String name) {
messageService.sendFanoutMessage(name+"님이 RabbitMQ 브로커에게 메시지를 보내요");
return ResponseEntity.ok(name+"님!! RabbitMQ 브로커에게 메시지(이벤트)를 보냈어요!!!🐇");
}
@GetMapping("/topic")
public ResponseEntity<?> sendTopicMessage(@RequestParam("name") String name) {
messageService.sendTopicMessage(name+"님이 RabbitMQ 브로커에게 메시지를 보내요");
return ResponseEntity.ok(name+"님!! RabbitMQ 브로커에게 메시지(이벤트)를 보냈어요!!!🐇");
}
}
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="get">
<input name="name" value="hong">
<button formaction="./send/direct">direct</button>
<button formaction="./send/fanout">fanout</button>
<button formaction="./send/topic">topic</button>
</form>
<a href="http://localhost:15672/">rabbit mq</a>
</body>
</html>
동작 확인
메시지 발송
먼저 index.html을 이용해 direct, fanout, topic 메시지를 각각 전송하자.

여기서 발생시킨 메시지는 RabbitMQ의 Queue로 전달된다.
RabbitMQManager에서의 확인
다음으로 RabbitMQManager의 Queue and Streams 메뉴를 살펴보자. Messages의 Ready에 있는 숫자가 각각의 큐가 전달받은 메시지의 개수이다.(테스트 삼아 7개를 보낸 상태)

다음 포스트에서는 Queue에서 메시지를 꺼내가는 서비스를 만들어보자.
'Spring-Cloud' 카테고리의 다른 글
| RabbitMQ - 1:기본 (0) | 2026.02.01 |
|---|---|
| 01. OpenFeign 1 (0) | 2026.01.24 |
소중한 공감 감사합니다