java - 如何使用Rabbit MQ将相关ID从发送方发送到消息中,并从接收方检索到消息头中

Ste*_*ano 2 java rabbitmq spring-rabbit

我使用 Rabbit MQ 发送和接收 JSON 消息。
我已经使用 RabbitTemplate 实例和 convertAndSend 方法实现了一个应用程序来向交换发送消息,如下所示: 在此处输入图片说明

rabbitTemplate.convertAndSend(exchangeNameOut, message.getString(PERSISTENCE_MESSAGE_ROUTING_KEY),
                    message.getString(PERSISTENCE_MESSAGE_BODY), new CorrelationData(""+analyticRuntime.getId()));
Run Code Online (Sandbox Code Playgroud)

在检索消息时,侧接收器,我实现了以下方法:

        @RabbitListener(queues = "${rabbit.queue.mail.name}",containerFactory = "rabbitListenerContainerFactory")
     public void processMailMessage(Message message) {
        log.info("ENTER [processMailMessage]  ");

        Mail mail;

            JSONObject messageBody = new JSONObject(new String(message.getBody()));

            String asset = "" + messageBody.get(Constants.PERSISTENCE_MESSAGE_ASSET_ID_KEY);

            String body = "" + messageBody.get(Constants.PERSISTENCE_MESSAGE_EVENT_KEY);

            String alarms = "";
            log.info("[processMailMessage] message.getMessageProperties().getCorrelationId() : " + message.getMessageProperties().getCorrelationId()";
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 为什么 message.getMessageProperties().getCorrelationId() 是 NULL ?在发送方法中,我插入了相关性。
  • Correlation Id 与我插入到 convertAndSend 方法中的 Correlation Data 相同吗?
  • 如何将相关 ID 检索到接收器方法中?

谢谢

Gar*_*ell 5

不; 相关数据用于关联发布者确认发送;它与相关 Id 属性无关。

使用MessagePostProcessor

rabbitTemplate.convertAndSend(exchangeNameOut, message.getString(PERSISTENCE_MESSAGE_ROUTING_KEY),
                message.getString(PERSISTENCE_MESSAGE_BODY), 
    m -> {
        m.getMessageProperties().setCorrelationIdString(""+analyticRuntime.getId());
        return m;
    });
Run Code Online (Sandbox Code Playgroud)

如果您不使用 Java8,请使用 new MessagePostProcessor() { ... }