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 消息。
我已经使用带有 convertAndSend 方法的 RabbitTemplate 实例实现了一个应用程序来向交换器发送消息,如下所示:
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?
在发送方法中我插入了相关性。
- 相关 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() { ... }
我已经使用 Rabbit MQ 发送和接收 JSON 消息。
我已经使用带有 convertAndSend 方法的 RabbitTemplate 实例实现了一个应用程序来向交换器发送消息,如下所示:
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? 在发送方法中我插入了相关性。
- 相关 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() { ... }