Spring integration Spring Cloud Stream如何阻止应用程序’;是否阻止接收重复消息?

Spring integration Spring Cloud Stream如何阻止应用程序’;是否阻止接收重复消息?,spring-integration,spring-cloud-stream,idempotent,Spring Integration,Spring Cloud Stream,Idempotent,Spring Cloud Stream基于至少一次的方法,这意味着在某些罕见的情况下,重复消息可以到达端点 SpringCloudStream是否保留已接收消息的缓冲区 《企业内集成模式》一书建议: 将接收器设计为幂等接收器,可以多次安全地接收同一消息 Spring Cloud Stream是否控制消费者中的重复消息 更新: 其中一段写道: 4.5.1。耐久性 与SpringCloudStream的固执己见的应用程序模型一致,消费群体订阅是持久的。也就是说,绑定器实现可确保组订阅是持久的,并且在

Spring Cloud Stream基于至少一次的方法,这意味着在某些罕见的情况下,重复消息可以到达端点

SpringCloudStream是否保留已接收消息的缓冲区

《企业内集成模式》一书建议: 将接收器设计为幂等接收器,可以多次安全地接收同一消息

Spring Cloud Stream是否控制消费者中的重复消息

更新:

其中一段写道:

4.5.1。耐久性 与SpringCloudStream的固执己见的应用程序模型一致,消费群体订阅是持久的。也就是说,绑定器实现可确保组订阅是持久的,并且在为组创建至少一个订阅后,该组将接收消息,即使消息是在组中的所有应用程序停止时发送的。 匿名订阅本质上是不持久的。对于某些绑定器实现(如RabbitMQ),可能有非持久组订阅。 通常,最好在将应用程序绑定到给定目标时始终指定使用者组。在扩展SpringCloudStream应用程序时,必须为其每个输入绑定指定一个使用者组这样做可以防止应用程序实例接收重复消息(除非需要这种行为,这是不寻常的)


我认为你对SpringCloudStream框架的责任的假设是错误的。 简单地说,Spring cloud stream是一个框架,负责将开发人员提供的生产者/消费者与Spring cloud stream绑定器(如Kafka、Rabbit、Kinesis等)公开的消息代理进行连接和调整。 因此,连接到代理、从代理接收消息、反序列化消息、调用用户代码、序列化消息并将其发送回代理属于框架职责范围。因此,您可以将其视为纯粹的基础设施

您所描述的更多的是一个应用程序问题,因为实际的接收器是用户将作为spring cloud stream开发体验的一部分开发的东西,因此幂等性的责任将由此类用户承担。 此外,最重要的是,大多数代理已经(以某种方式)通过确保特定消息只传递一次来处理幂等性。也就是说,如果有人向该代理发送相同的消息,它将不知道该消息是重复的,因此对幂等性和/或重复数据消除的要求仍然有效,但正如您所看到的,考虑到正在发挥作用的因素的数量,您对幂等性的理解可能与我的不同,因此,我们的方法也可能不同。
最后一件事(部分证明我的最后一点):可以安全地多次接收相同的消息。-这就是它所说的全部,但是安全对你和我以及其他人来说真正意味着什么呢?

我认为你对spring cloud stream框架的责任的假设是错误的。 简单地说,Spring cloud stream是一个框架,负责将开发人员提供的生产者/消费者与Spring cloud stream绑定器(如Kafka、Rabbit、Kinesis等)公开的消息代理进行连接和调整。 因此,连接到代理、从代理接收消息、反序列化消息、调用用户代码、序列化消息并将其发送回代理属于框架职责范围。因此,您可以将其视为纯粹的基础设施

您所描述的更多的是一个应用程序问题,因为实际的接收器是用户将作为spring cloud stream开发体验的一部分开发的东西,因此幂等性的责任将由此类用户承担。 此外,最重要的是,大多数代理已经(以某种方式)通过确保特定消息只传递一次来处理幂等性。也就是说,如果有人向该代理发送相同的消息,它将不知道该消息是重复的,因此对幂等性和/或重复数据消除的要求仍然有效,但正如您所看到的,考虑到正在发挥作用的因素的数量,您对幂等性的理解可能与我的不同,因此,我们的方法也可能不同。
最后一件事(部分证明我的最后一点):可以安全地多次接收相同的消息。-这就是它所说的全部,但是安全对您和我以及其他人来说真正意味着什么呢?

如果您担心应用程序接收并处理来自代理的消息,但在确认消息之前崩溃,那么这种情况可能会发生。Spring cloud stream应用程序启动器支持自动配置支持Spring集成的持久性应用程序。这方面的一个例子是。默认情况下,sftp源使用内存中的元数据存储,因此它无法在重新启动后生存,但可以自定义为使用持久存储

如果您担心应用程序接收并处理来自代理的消息,但在确认消息之前崩溃,则可能会发生这种情况。Spring cloud stream应用程序启动器支持自动配置支持Spring集成的持久性应用程序。这方面的一个例子是。默认情况下,sftp源使用内存中的元数据存储,因此它无法在重新启动后生存,但可以自定义为使用持久存储

谢谢Oleg。我用文档中的一段更新了问题。我认为文档的某些部分需要审阅。谢谢Oleg。我用文档中的一段更新了问题。我认为文档的某些部分需要审阅。非常感谢。我会检查您的so