任何人都可以通过使用Throttler处理器实例或在Apache Camel中使用节流元素来提供有关如何动态更改maxRequestsPerPeriod的示例吗? (参考 - How to change Processor properties during runtime using Camel?)
我们不能将Expression与header一起使用,因为如果标题不存在,那么Throttler会使用旧值。我们需要的是,在基于某些条件的bean中,我们必须更新限制值,以便在下次更新之前使用它。在我们的例子中,我们不能为此目的使用消息头。
我们如何在路线中导航运行时处理器并找到Throttler动态更改它?请帮忙提供样品。
感谢。
答案 0 :(得分:1)
感谢Claus ..我们将在即将发布的Camel 2.16版本中检查jmx mbeans。
现在,以下解决方案适用于 Camel 2.15.2 :
Java DSL:
from("direct:start")
.routeId("throttleroute")
.throttle(ExpressionBuilder.beanExpression("throttleBean","getThrottle"))
.timePeriodMillis(2000)
.to("jms:test.MyQueue")
.beanRef("throttleBean", "receiveData");
Spring DSL:
<route id="throttleroute">
<from uri="direct:start" />
<throttle timePeriodMillis="2000">
<method ref="throttleBean" method="getThrottle" />
<to uri="jms:test.MyQueue" />
</throttle>
<to uri="bean:throttleBean?method=receiveData" />
</route>
这里的throttleBean.getThrottle()方法将具有动态生成和返回所需限制值的逻辑。
答案 1 :(得分:0)
您可以使用JMX进行更改,例如管理API。
mbean具有JMX属性以在运行时更改值。
在即将发布的Camel 2.16版本中,您可以使用
更轻松地从java代码中获取jmx mbeans只是你知道mbean的id。您可以在路由中分配ID,因此它使用已知的ID,而不是自动生成。哪个顺便说一句也可以使用纯JMX api更容易找到mbean。