java - 他们是一种在 apache camel(activemq) 中的消息处理之间添加延迟的方法吗
问题描述
- Application1:源系统每秒向 apache camel(ActiveMQ)发送 10 个请求。
- Application2:Apache camel,它接收来自 Application1 的请求并将其发送到下游系统 Application3(10 个请求/秒)。
- Application3:下游系统(post API)每秒从 apache camel 获取 10 个请求并处理该请求。
问题陈述:应用程序 3 有数据库更新和处理任务要处理,因为对应用程序 3 一次有 10 个请求,在处理和数据库更新期间会生成重复项。
请建议我可以在 apache camel /下游系统的每个请求之间添加 1 秒延迟的方式。
提前致谢。
解决方案
Camel 中有一个延迟 EIP,您可以使用它来延迟每条消息(可能在应用程序 2 中)一段固定甚至计算的时间。确保您在应用程序 2 中只有 1 个使用者。
Camel中还有一个Throttle EIP,但它将所有被保留在内存中的消息。在您的情况下,最好减慢应用程序 2 的消耗以避免应用程序 3 过载。
我猜应用程序 3 会重复,因为它无法跟上请求,然后应用程序 2 会超时,并且它的错误处理会再次发送请求。
但是,当您使用消息传递时,您必须为重复做好准备。在错误情况下,您很容易收到重复项,因此您必须使应用程序 3 具有幂等性。
当然,感谢Idempotent Consumer ,Camel 也可以帮助您。
推荐阅读
- html - 如何在另一个 CSS Grid 中创建一个 Grid?
- autolayout - 将 iPhone XR 支持添加到 Xcode 10 中的现有 iOS 应用程序
- python - 如何从 python 的超级列表中找到子列表中可能的有序组的数量?
- python - 使用 python 编辑 QlistWidget 中的部分行
- excel - 测试和更改用户范围输入的行号和工作表索引的 VBA 函数
- kubernetes - Kubernetes pod 探测的安全上下文
- c - 每个从 sched_getscheduler(pid) 返回的 int 值对应的调度策略是什么?[C]
- python - 我可以仅使用非空值在行之间使用余弦相似度吗?
- r - 与 MatchIt 的最佳匹配仅限于共同支持的区域
- ios - UITableViewCell 中的 UIStackView 与多行 UILabel