本文解决:
- RabbitMQ消息者如何获取生产者设置的correlationId
- 获取到的CorrelationId为空
本文环境:
springboot 2.1.9.RELEASE + amqp-client-5.4.3.jar
本文分两部分,第一部分先直接给代码实现,第二部分进行原理解析。
实现代码
交换机、路由那些就自己改吧,附上全部代码很累赘,只说关键点
-
注册一个bean
@Bean public MessagePostProcessor correlationIdProcessor() { MessagePostProcessor messagePostProcessor = new MessagePostProcessor() { @Override public Message postProcessMessage(Message message, Correlation correlation) { MessageProperties messageProperties = message.getMessageProperties(); if (correlation instanceof CorrelationData) { String correlationId = ((CorrelationData) correlation).getId(); messageProperties.setCorrelationId(correlationId); } // 可以设置持久化,但与本文无关,因此没有附上 return message; } @Override public Message postProcessMessage(Message message) throws AmqpException { return message; } }; return messagePostProcessor; }
-
生产者发送消息时,使用该bean作为参数
(除了作为参数传入,还可以全局设置,原理解析会讲)
// @Bean不指定name时,默认为方法名,此处就是注入上述bean @Autowired MessagePostProcessor correlationIdProcessor; public void sendMiaoshaMessage(String msg) { CorrelationData correlationData = gencorrelationData(); System.out.println