当前位置: 首页 > 知识库问答 >
问题:

发送带有Spring云流和RabbitMq更改ID的消息

杨研
2023-03-14

我正在使用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个答案

孙志
2023-03-14

Spring Messaging消息是不可变的;每次突变时,它们都会获得一个新ID。

您可以使用自定义标头或IntegrationMessageHeaderAccessor。CORRELATION\u ID传递常量值;在大多数用例中,相关id标头由应用程序在消息旅程开始时设置为id标头。

 类似资料:
  • 如何使用新的Spring Cloud Stream Kafka功能模型发送消息? 不推荐的方式是这样的。 但是我如何以函数式风格发送消息呢? 应用yml公司 我会自动连接MessageChannel,但对于process、process-out-0、output或类似的东西,没有MessageChannel Bean。或者我可以用供应商Bean发送消息吗?谁能给我举个例子吗?谢谢!

  • 所以我不确定如何做到这一点。我已经使用Qukus和MicroProfile反应式消息传递框架以及javax.websocket库的东西做到了这一点,但我不确定如何将其移植到使用Kafka Streams。使用MP反应式消息传递,我可以在其他类中的一个通道上有一个@外出注释,然后使用我的WebSocket服务,我可以像这样从该通道注入。 Kafka流有可能做到这一点吗?

  • 我正在尝试在我的android应用程序中使用GCM服务。 为此,我使用Android留档从http://developer.android.com/guide/google/gcm/gcm.html 我用发送者id等创建了客户端注册过程,并在服务器端应用程序中使用注册id和发送者id发送消息。 当我通过Eclipse在手机中安装应用程序时,推送通知工作正常,因此我的发件人id是正确的。 然后,当我

  • 本文向大家介绍RabbitMQ 的消息是怎么发送的?相关面试题,主要包含被问及RabbitMQ 的消息是怎么发送的?时的应答技巧和注意事项,需要的朋友参考一下 首先客户端必须连接到 RabbitMQ 服务器才能发布和消费消息,客户端和 rabbit server 之间会创建一个 tcp 连接,一旦 tcp 打开并通过了认证(认证就是你发送给 rabbit 服务器的用户名和密码),你的客户端和 Ra

  • null 谁能给我一个向RabbitMQ发送消息的标准程序的例子。我正在使用Spring Boot,也可以使用它的特性。

  • 我正在使用控制总线(rabbitmq)配置spring config server,但当我添加其依赖项时,应用程序无法启动,出现错误: 使用spring云版本