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

Spring云数据流-保留消息顺序

姜羽
2023-03-14

假设我有一个包含3个应用程序的流——一个源、处理器和接收器。

我需要保留从源收到的消息的顺序。当我收到消息A,B,C,D,我必须将它们作为A,B,C,D.发送到接收器(我不能将它们作为B,A,C,D)发送。

如果每个应用程序只有一个实例,那么一切都将按顺序运行,并且顺序将被保留。

如果我每个应用程序有 10 个实例,则消息 A、B、C、D 可能会在不同的实例中同时处理。我不知道这些消息的顺序是什么。

那么,有什么方法可以确保在使用多个实例时保留消息的顺序呢?

共有1个答案

昌勇锐
2023-03-14

不当您向外扩展时(通过绑定器中的并发性或通过部署多个实例),就会失去秩序。这适用于任何多线程应用程序,而不仅仅是Spring云流。

您可以使用分区,以便每个实例都获得数据的一个分区,但排序仅保留在每个分区中。

如果消息中有序列信息,可以使用Spring Integration重排序器添加一个自定义模块,将消息重新组合到相同的序列中,但在单个接收器实例之前,需要重排序器的单个实例。

 类似资料:
  • 我正在尝试用spring cloud stream实现spring cloud契约。我有一个使用StreamBridge的制作人 方法sendMessage()是从rest控制器调用的。 我的合同是这样的: 当我运行测试时,会调用triggerCreateOrganization()方法,并在日志中看到日志消息“生产组织到主题”。 我在生成的测试的基类上有@AutoConfigureMessage

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

  • 我有一个可用的列表名,我正在按blockIndex属性对这些列表进行排序和分组,如下所示: 问题是分组的结果不按block Index排序。

  • 当使用Kafka Connect IBM MQ Source Connector使用5个任务的并行级别从IMB MQ读取时,是否可以保留消息顺序(将具有相同键的消息分配给相同的分区)?

  • 我想创建一个公共项目(使用spring cloud stream),根据消息内容动态地将消息路由到不同的(消费者)项目。(rabbitmq作为消息代理) spring cloud stream支持吗?如果没有,有什么建议的方法来实现这一点?thx公司

  • 我有一个现有的过程,我正试图转换成SCDF实现。目前的流程是, HTTP接收器(接收HTTP POST数据)->RabbitMQ->MQ接收器服务->处理/转换->DB接收器