我有一个用 Java DSL 编写的骆驼路线定义,如下所示:
from(myEndpoint)
.throttle(200)
.to(myOtherEndpoint);
这使用 Throttler 连接我的两个端点,将消息流限制为每秒 200 条消息。
我正在寻找一种在运行时更改 maximumRequestCount / 秒的方法。所以我需要以某种方式到达被调用的 Throttler 实例并更改属性。
如何访问 Throttler?
我有一个用 Java DSL 编写的骆驼路线定义,如下所示:
from(myEndpoint)
.throttle(200)
.to(myOtherEndpoint);
这使用 Throttler 连接我的两个端点,将消息流限制为每秒 200 条消息。
我正在寻找一种在运行时更改 maximumRequestCount / 秒的方法。所以我需要以某种方式到达被调用的 Throttler 实例并更改属性。
如何访问 Throttler?
好吧,我自己想通了……
您需要自己定义 Throttler 实例。
Throttler throttler = new Throttler(null, 200);
然后你可以像这样在你的路由中使用它,因为 Throttler 实现了处理器接口:
from(myEndpoint)
.process(throttler)
.to(myOtherEndpoint);
您可以随时更改节流阀的属性。
是的,这是一个很好的解决方案。
在 Camel 2.0 中,您现在可以在路径中导航运行时处理器,从而找到任何 Throttlers,然后能够动态更改它。
但我们也在努力改进 Camel 2.1 中的 JMX,以便您可以从 JMX 更改节流器/延迟器等。
并且也许还改进 Navigate API,以便您可以在单列中找到,例如,如果您在路线中提供 id,则可以按 id 查找。或按类型,以便您可以过滤并仅获取 Throttlers 等。
我有一个 Apache Camel Spring Boot 应用程序,它有 5 个实例从具有组 ID 的 kafka 主题读取并发布到 REST API。我们想在这 5 个 Apache camel spring boot 实例中实现一个节流机制。例如,每分钟有 20K 个请求被路由到 REST API。我阅读了有关 Throttling 的相关表达式功能。https://camel.apache.org/components/3.15.x/eips/throttle-eip.html
让我们将camel spring boot应用程序命名为A,B,C,D和E然后correlationExpression对于单个实例每分钟只能处理20K请求 - A每分钟20K请求,B每分钟20K请求,C每分钟20K请求, D 为每分钟 20K 请求,E 为每分钟 20K 请求然后它将为 REST API 端点过载。
我需要在 5 个骆驼弹簧启动实例中实现节流功能 - 通过添加所有实例请求率,每分钟的总请求数应为 20K - 即 A 中的每分钟请求 + B 中的每分钟请求 + C+请求中的每分钟请求D 中的每分钟 + E 中的每分钟请求 = 20K 每分钟
但是我不确定我们如何配置这个连接 5 个骆驼弹簧靴实例的相关表达式,以便通过考虑来自这 5 个骆驼弹簧靴实例的所有请求,每分钟的总请求应该是每分钟 20K 请求。
我将不胜感激所有的帮助和指导。