我们说我有一个包含3个应用程序的流 - 源,处理器和接收器。
我需要保留从我的来源收到的消息的顺序。当我收到消息A,B,C,D时,我必须将它们作为A,B,C,D发送到接收器。 (我不能将它们作为B,A,C,D发送。)
如果我每个应用程序只有一个实例,则所有内容都将按顺序运行,并且将保留订单。
如果每个应用程序有10个实例,则可能会在不同的实例中同时处理消息A,B,C,D。我不知道这些消息会以什么顺序出现。
那么有什么方法可以确保在使用多个实例时保留我的消息顺序?
答案 0 :(得分:3)
没有;当您向外扩展时(通过绑定器中的并发或通过部署多个实例),您将失去顺序。对于任何多线程应用程序都是如此,而不仅仅是spring-cloud-stream。
您可以使用分区,以便每个实例获取数据的分区,但排序仅保留在每个分区中。
如果您的消息中有序列信息,您可以使用Spring Integration Resequencer添加自定义模块,将消息重新组合成相同的序列 - 但在单个接收器之前,您需要单个重定序器实例实例