Apache camel ApacheCamel-动态更改节流阀值

Apache camel ApacheCamel-动态更改节流阀值,apache-camel,Apache Camel,任何人都可以给出一个示例,说明如何通过使用Throttler处理器实例或apachecamel中的throttle元素来动态更改maxRequestsPerPeriod吗?(参考-) 我们不能将表达式与标头一起使用,因为如果缺少标头,则节流器将使用旧值。我们需要的是,在基于某些条件的bean中,我们必须更新throttle值,以便在下次更新之前使用它。在我们的例子中,我们不能将消息头用于此目的 我们如何在路由中导航运行时处理器并找到节流器来动态更改它?请帮我拿一个样品 谢谢。您可以使用JMX等管

任何人都可以给出一个示例,说明如何通过使用Throttler处理器实例或apachecamel中的throttle元素来动态更改maxRequestsPerPeriod吗?(参考-)

我们不能将表达式与标头一起使用,因为如果缺少标头,则节流器将使用旧值。我们需要的是,在基于某些条件的bean中,我们必须更新throttle值,以便在下次更新之前使用它。在我们的例子中,我们不能将消息头用于此目的

我们如何在路由中导航运行时处理器并找到节流器来动态更改它?请帮我拿一个样品


谢谢。

您可以使用JMX等管理api对其进行更改

mbean具有JMX属性以在运行时更改值

在即将发布的Camel 2.16版本中,您可以使用


只是你知道mbean的id。您可以在路由中分配id,因此它使用的是已知id,而不是自动生成的id。顺便说一句,这也使得使用纯JMX api查找mbean变得更容易。

谢谢克劳斯。我们将在即将发布的Camel 2.16版本中检查JMX mbean

现在,以下解决方案适用于骆驼2.15.2:

Java DSL:

from("direct:start")
  .routeId("throttleroute")
  .throttle(ExpressionBuilder.beanExpression("throttleBean","getThrottle"))
  .timePeriodMillis(2000)
  .to("jms:test.MyQueue")
  .beanRef("throttleBean", "receiveData");
春季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()方法将具有动态生成和返回所需的throttle值的逻辑