DEV Community

Cover image for Spring AMQP: How to Convert Messages for Sending and Receiving Objects
İbrahim Gündüz
İbrahim Gündüz

Posted on • Originally published at Medium

Spring AMQP: How to Convert Messages for Sending and Receiving Objects

org.springframework.boot:spring-boot-starter-amqp uses SimpleMessageConverter as its default MessageConverter implementation. This means it handles text-based content, byte arrays, and serialized Java objects.

In this article, we'll see how to send and receive plain Java objects as RabbitMQ messages using Jackson2JsonMessageConverter.

Implementation

If your project doesn't use spring-boot-starter-web, add the following package to ensure you get the jackson libraries with the version managed by Spring boot.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Create a new Jackson2JsonMessageConverter bean to use as the message converter for messages being sent and received.

@Bean
public Jackson2JsonMessageConverter messageConverter() {
    return new Jackson2JsonMessageConverter();
}
Enter fullscreen mode Exit fullscreen mode

Create a new RestTemplate bean that uses the previously defined Jackson2JsonMessageConverter to convert messages being sent to objects.

@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter messageConverter) {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
    rabbitTemplate.setMessageConverter(messageConverter);
    return rabbitTemplate;
}
Enter fullscreen mode Exit fullscreen mode

And finally, create a new SimpleRabbitListenerContainerFactory that uses the message converter to enable Spring Boot to transform messages into plain Java objects in the listeners you create later.

@Bean
public SimpleRabbitListenerContainerFactory listenerContainerFactory(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter messageConverter) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setMessageConverter(messageConverter);
    return factory;
}
Enter fullscreen mode Exit fullscreen mode

Now you can send and receive messages easily, as shown below.

PaymentEvent event = new PaymentEvent(
        "https://webhook.site/ecd3dc67-e32e-41d9-82ff-3505c0fd2ab9",
        "payment.completed",
        "8a7f70f6-912c-497e-802c-c7bde9e4bb33"
);

rabbitTemplate.convertAndSend(MessageBrokerBindingConfig.PAYMENT_EVENTS_EXCHANGE, "payment.events.completed", event);

Enter fullscreen mode Exit fullscreen mode
@RabbitListener(queues = MessageBrokerBindingConfig.PAYMENT_EVENTS_QUEUE)
public void onMessage(PaymentEvent event) {
    //  TODO 
}
Enter fullscreen mode Exit fullscreen mode

In this article, we briefly explained how to configure Spring AMQP to send and receive plain Java objects.

Thanks for reading.

Credits:

Top comments (0)