首页 > 解决方案 > 他们是一种在 apache camel(activemq) 中的消息处理之间添加延迟的方法吗

问题描述

  1. Application1:源系统每秒向 apache camel(ActiveMQ)发送 10 个请求。
  2. Application2:Apache camel,它接收来自 Application1 的请求并将其发送到下游系统 Application3(10 个请求/秒)。
  3. Application3:下游系统(post API)每秒从 apache camel 获取 10 个请求并处理该请求。

问题陈述:应用程序 3 有数据库更新和处理任务要处理,因为对应用程序 3 一次有 10 个请求,在处理和数据库更新期间会生成重复项。

请建议我可以在 apache camel /下游系统的每个请求之间添加 1 秒延迟的方式。

提前致谢。

标签: javaspring-bootapache-camel

解决方案


Camel 中有一个延迟 EIP,您可以使用它来延迟每条消息(可能在应用程序 2 中)一段固定甚至计算的时间。确保您在应用程序 2 中只有 1 个使用者。

Camel中还有一个Throttle EIP,但它将所有被保留在内存中的消息。在您的情况下,最好减慢应用程序 2 的消耗以避免应用程序 3 过载。

我猜应用程序 3 会重复,因为它无法跟上请求,然后应用程序 2 会超时,并且它的错误处理会再次发送请求。

但是,当您使用消息传递时,您必须为重复做好准备。在错误情况下,您很容易收到重复项,因此您必须使应用程序 3 具有幂等性。

当然,感谢Idempotent Consumer ,Camel 也可以帮助您。


推荐阅读