我正在使用Spring Cloud Stream和RabbitMq在不同的微服务之间交换消息。
这就是我设置要发布消息的位置。
public interface OutputChannels {
static final String OUTPUT_CHANNEL = "outputChannel";
@Output
MessageChannel outputChannel();
}
。
@EnableBinding(OutputChannels.class)
@Log4j
public class OutputProducer {
@Autowired
private OutputChannels outputChannels;
public void createMessage(MyContent myContent) {
Message<MyContent> message = MessageBuilder
.withPayload(myContent)
.build();
outputChannels.outputChannel().send(message);
log.info("Sent message: " + message.getHeaders().getId() + myContent);
}
}
接收消息的设置
public interface InputChannels {
String INPUT_CHANNEL = "inputChannel";
@Input
SubscribableChannel inputChannel();
}
。
@EnableBinding(InputChannels.class)
@Log
public class InputConsumer {
@StreamListener(InputChannels.INPUT_CHANNEL)
public void receive(Message<MyContent> message) {
MyContent myContent = message.getPayload();
log.info("Received message: " + message.getHeaders().getId() + ", " + myContent);
}
}
我能够使用此设置成功交换消息。我希望发送的消息和接收的消息的ID相等。但是它们始终是不同的UUID。
从生产者到RabbitMq到消费者,消息是否一直保持相同的ID?
答案 0 :(得分:0)
Spring Messaging消息是不可变的。他们每次被突变都会获得一个新的ID。
您可以使用自定义标头或IntegrationMessageHeaderAccessor.CORRELATION_ID
来传递常量值;在大多数使用情况下,相关ID标头是由应用程序在邮件传输开始时设置为ID标头的。