繁体   English   中英

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

[英]Sending a Message with Spring Cloud Stream and RabbitMq changes ID

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

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

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

暂无
暂无

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

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