티스토리 뷰

개발/Spring

[Spring] - RabbitMQ 예제

dongdev 2022. 4. 7. 13:12

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 프로젝트 실행 후, 메세지를 잘 받아오는 것을 볼 수 있다.

 

링크
최근에 올라온 글
글 보관함
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31