使用Spring Cloud Stream和RabbitMq发送消息更改ID

时间:2018-10-19 15:00:01

标签: spring rabbitmq spring-cloud-stream

我正在使用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?

1 个答案:

答案 0 :(得分:0)

Spring Messaging消息是不可变的。他们每次被突变都会获得一个新的ID。

您可以使用自定义标头或IntegrationMessageHeaderAccessor.CORRELATION_ID来传递常量值;在大多数使用情况下,相关ID标头是由应用程序在邮件传输开始时设置为ID标头的。