Apache Camel - 动态更改油门值

时间:2015-06-15 08:18:24

标签: apache-camel

任何人都可以通过使用Throttler处理器实例或在Apache Camel中使用节流元素来提供有关如何动态更改maxRequestsPerPeriod的示例吗? (参考 - How to change Processor properties during runtime using Camel?

我们不能将Expression与header一起使用,因为如果标题不存在,那么Throttler会使用旧值。我们需要的是,在基于某些条件的bean中,我们必须更新限制值,以便在下次更新之前使用它。在我们的例子中,我们不能为此目的使用消息头。

我们如何在路线中导航运行时处理器并找到Throttler动态更改它?请帮忙提供样品。

感谢。

2 个答案:

答案 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。