【问题标题】:Is their a way to add a delay between messages processing in apache camel(activemq)他们是一种在 apache camel(activemq) 中的消息处理之间添加延迟的方法吗
【发布时间】:2021-07-07 15:35:51
【问题描述】:
  1. Application1:源系统每秒向 apache camel (ActiveMQ) 发送 10 个请求。
  2. Application2:Apache camel 接收来自 Application1 的请求并将其发送到下游系统 Application3(10 个请求/秒)。
  3. Application3:下游系统(post API)每秒从 apache camel 获取 10 个请求并处理请求。

问题说明:Application3 有 DB 更新和处理任务要处理,因为一次向 application3 发出 10 个请求,在处理和 DB 更新期间会生成重复项。

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

提前致谢。

【问题讨论】:

  • 我认为你不应该在你的服务总线和你的消费者上增加延迟。立即在 HashSet 集合中确认和堆叠消息然后实现该实体列表的批量更新怎么样?
  • 问题是为什么你会得到重复。

标签: java spring-boot apache-camel


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多