当监听器使用时,从RabbitMQ中删除消息。无法确定ReplyTo消息异常

时间:2018-05-15 09:28:36

标签: rabbitmq spring-amqp

使用SpringBoot。

我创建了一个TopicExchange,它接受消息并根据消息中存在的routingKey将它们指向两个队列。

通过以下方式发送消息:

rabbitTemplate.convertAndSend('in-out-topic', 'inbound.queue.route.key', payload)

收到消息:

 @RabbitListener(queues = "inbound-queue")
  def onInboundMessage(def message) {
    try {
      log.debug("Received inbound message: ${message.messageId} on inbound queue listener", message)

    } catch (Exception ex) {
      log.error("Inbound message exception: ${ex.getMessage()}")
      return;
    }
    return message.payload
  }

但是当我的听众(消费者)收到消息时,我得到以下异常:

org.springframework.amqp.AmqpException: Cannot determine ReplyTo message property value: Request message does not contain reply-to property, and no default response Exchange was set.
  • 我应该通过RabbitMQ仪表板创建虚拟响应交换吗?
  • 硬编码不存在的replyTo属性?
  • 以某种方式配置现有的topicExchange或队列?

我只是希望在消息监听器使用消息时从相应的队列中删除消息。

1 个答案:

答案 0 :(得分:1)

你的问题在方法的最后,在这里:

return message.payload

如果你真的不打算发送回复,我们确实通过convertAndSend()的期望看到了,那么你不应该从@RabbitListener方法返回任何内容。否则,正如您所遇到的那样,此方法的返回被视为尝试发送回复。

请参阅“参考手册”中的更多信息:https://docs.spring.io/spring-amqp/docs/2.0.3.RELEASE/reference/html/_reference.html#async-annotation-driven。请注意Reply Management段落。