티스토리 뷰
RabbitMQ Management에서 Exchange와 Queue, Routing key를 생성한다.
exchange 생성

본인은 Name: topic.exchange, Type: topic, 나머지는 기본값으로 설정했다.
exchange 타입에 관해서는 아래글을 참고하자.
http://egloos.zum.com/killins/v/3025514
AMQP Introduction
1. AMQP란 무엇인가? - Advanced Message Queing Protocol의 약자로, 흔히 알고 있는 MQ의 오픈소스에 기반한 표준 프로토콜을 의미한다. AMQP 자체는 프로토콜을 의미하기 때문에 이 프로토콜에 따른 실제 MQ
egloos.zum.com
queue 생성

test.queue로 설정했다.
binding 설정
본인이 생성한 queue or exchange를 누르면 바인딩 설정을 할 수 있다.

본인은
exchange: topic.exchange
queue: test.queue
routing key: test.dong.#
으로 설정했다.
스프링부트 코드
전체적인 흐름은 아래와 같다.

Publisher
application.yml
server:
port: 9081
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
TestConfig.java
@Configuration
public class TestConfig {
public static final String EXCHANGE_NAME = "topic.exchange";
public static final String QUEUE_NAME = "test.queue";
public static final String ROUTING_KEY = "test.dong.#";
@Bean
public TopicExchange exchange() {
return new TopicExchange(EXCHANGE_NAME);
}
@Bean
public Queue queue() {
return new Queue(QUEUE_NAME);
}
@Bean
public Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
}
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(messageConverter);
return rabbitTemplate;
}
}
TestController.java
@RestController
public class SampleController {
@Autowired
RabbitTemplate rabbitTemplate;
// 객체 메시지큐 테스트
@GetMapping("/test/member")
public String objectPublish() {
Member member = new Member("홍길동", 18, "010-1234-5678");
rabbitTemplate.convertAndSend(TestConfig.EXCHANGE_NAME, TestConfig.ROUTING_KEY, member);
return "object sending!";
}
}
Member.java
public class Member {
private String name;
private int age;
private String tel;
public Member(String name, int age, String tel) {
this.name = name;
this.age = age;
this.tel = tel;
}
public Member() {
}
@Override
public String toString() {
return "Member{" +
"name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getTel() {
return tel;
}
}
프로젝트 작성 후, 테스트 해보자.


해당 큐에 메세지가 잘 들어온걸 볼 수 있다.
Consumer
application.yml
server:
port: 9080
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
testConfig.java
@Configuration
public class TestConfig {
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}
testListener
@Component
public class TestListener {
private static final Logger log = LoggerFactory.getLogger(SampleListener.class);
@RabbitListener(queues = "test.queue")
public void receiveMessage(Member member) {
log.info(member.toString());
}
}
Member.java
Publisher랑 동일하다.
Consumer 프로젝트 실행 후, 메세지를 잘 받아오는 것을 볼 수 있다.

'개발 > Spring' 카테고리의 다른 글
| [JPA] - JPA 고급 매핑 (0) | 2022.05.28 |
|---|---|
| [JPA] - JPA 다양한 연관관계 매핑 (0) | 2022.05.13 |
| [Spring] - RabbitMQ 설치 (0) | 2022.04.07 |
| [Spring] - error code [17056]; 지원되지 않는 문자 집합 (0) | 2022.04.04 |
| [Spring] - RebbitMQ : java.lang.ClassNotFoundException 에러 (0) | 2022.03.24 |