繁体   English   中英

如何使用Java通过Rabbit MQ将相关ID从发送方发送到消息中以及如何从接收方检索到消息头中

[英]How to send correlation id, into message, from sender and retrieval from receive into message header with Rabbit MQ by java

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

rabbitTemplate.convertAndSend(exchangeNameOut, message.getString(PERSISTENCE_MESSAGE_ROUTING_KEY),
                    message.getString(PERSISTENCE_MESSAGE_BODY), new CorrelationData(""+analyticRuntime.getId()));

在检索消息的同时,我还实现了以下方法:

        @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()";
}

问题是:

  • 为什么message.getMessageProperties()。getCorrelationId()为NULL? 在send方法中,我已经插入了相关性。
  • 关联ID是否与我已插入convertAndSend方法中的关联数据相同?
  • 如何将相关性ID检索到接收器方法中?

谢谢

没有; 关联数据用于关联发布者确认发送; 它与关联ID属性无关。

使用MessagePostProcessor

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM