Search code examples
javaspring-bootspring-integrationspring-amqp

Spring AMQP: Amqp.outboundAdapter to @RabbitListener, error sending response due to missing "reply-to" property


So,

I have 2 Spring Boot applications (2.6.10) that need to communicate via RabbitMQ / AMQP. App #1 is Spring Integration based and uses

Amqp.outboundAdapter(rabbitTemplate).routingKey("app1-to-2")

to send messages in flow #1

Amqp.inboundAdapter(connectionFactory, "app2-to-1")

to receive messages in flow #2

App #2 is using RabbitListener to receive messages from App #1, process them immediately and return a reply:

@RabbitListener(queues={"app1-to-2"})
public MyResponse handleMessage(final MyRequest request) {
 var myResponse = this.process(myRequest);
 
 rabbitTemplate.convertAndSend("app2-to-1",myResponse);
}

However, upon receiving myRequest in App #2, the response cannot be send, due to:

AmqpException: Cannot determine ReplyTo message property value: Request message does not contain reply-to property, and no default response Exchange was set.

Question is: Why is the routing key from convertAndSend ignored or how to set reply-to property with Amqp.outboundAdapter?


Solution

  • Your error has nothing to do with the convertAndSend(). It is the problem of the @RabbitListener method signature. Since you don't deal with request-reply pattern, your listener method must have a void return type. Otherwise it tries to send that MyResponse object as a reply message body and therefore we see that error trying to resolve ReplyTo from default strategy.