spring-boot RabbitMQ 테스트 코드

rabbitmq-mock

rabbitmq의 테스트 코드를 작성하기 위해 rabbitmq-mock 프로젝트를 이용하려고 한다.

github 을 통해 프로젝트를 볼 수 았다.


Dependency

1
testImplementation('com.github.fridujo:rabbitmq-mock:1.1.1')


Test Code

해당 프로젝트의 test code 를 가져왔다.

Bean 추가

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
32
33
34
35
36
@TestConfiguration
public class AmqpTestConfig {

    @Bean
    ConnectionFactory connectionFactory() {
        return new CachingConnectionFactory(
                MockConnectionFactoryFactory
                        .build()
                        .enableConsistentHashPlugin()
        );
    }

    @Bean
    RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
        return new RabbitAdmin(connectionFactory);
    }

    @Bean
    RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(messageConverter());
        return rabbitTemplate;
    }

    @Bean
    RabbitTemplate testRabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(messageConverter());
        return rabbitTemplate;
    }

    @Bean
    MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}


Direct Exchange Test Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Test
    public void helloWorld() {
        Msg msg = Msg.builder()
                .content("hi")
                .build();

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AmqpTestConfig.class);

        RabbitTemplate rabbitTemplate = queueAndExchangeSetup(context);
        rabbitTemplate.convertAndSend(CodeConstants.AMQP.MSG_EXCHANGE, CodeConstants.AMQP.ROUTING_KEY, msg.toString());

        Msg message = rabbitTemplate.receiveAndConvert(CodeConstants.AMQP.MSG_QUEUE, new ParameterizedTypeReference<Msg>() {});

        log.info("message >> {}", message);
    }


message 를 Dto 로 매핑하기 위해, rabbitmqTemplate 에 messageConverter를 추가하였다.