Отправка сообщения с помощью Spring Cloud Stream и идентификатора изменений RabbitMq - PullRequest
0 голосов
/ 19 октября 2018

Я использую 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);
  }
}

Я могу успешно обмениваться сообщениями с этой настройкой.Я ожидаю, что идентификаторы отправленного сообщения и полученного сообщения равны.Но они всегда разные UUID.

Есть ли способ, чтобы сообщение сохраняло один и тот же идентификатор на всем пути от производителя через RabbitMq до потребителя?

1 Ответ

0 голосов
/ 19 октября 2018

Spring Messaging сообщения являются неизменяемыми;они получают новый идентификатор каждый раз, когда они видоизменяются.

Вы можете использовать пользовательский заголовок или IntegrationMessageHeaderAccessor.CORRELATION_ID для передачи постоянного значения;в большинстве случаев заголовок идентификатора корреляции устанавливается приложением в заголовок идентификатора в начале пути сообщения.

...