Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Camel在运行时更改处理器属性?_Java_Apache Camel - Fatal编程技术网

Java 如何使用Camel在运行时更改处理器属性?

Java 如何使用Camel在运行时更改处理器属性?,java,apache-camel,Java,Apache Camel,我有一个用Java DSL编写的路由定义,如下所示: from(myEndpoint) .throttle(200) .to(myOtherEndpoint); 这将使用节流器连接我的两个端点,节流器将消息流限制为每秒200条消息 我正在寻找一种在运行时更改maximumRequestCount/秒的方法。 因此,我需要以某种方式访问被调用的Throttler实例并更改属性 我怎样才能接近节流阀?好的,我自己想出来的 您需要自己定义节流器实例 Throttler throttler = ne

我有一个用Java DSL编写的路由定义,如下所示:

from(myEndpoint) 
.throttle(200)
.to(myOtherEndpoint);
这将使用节流器连接我的两个端点,节流器将消息流限制为每秒200条消息

我正在寻找一种在运行时更改maximumRequestCount/秒的方法。 因此,我需要以某种方式访问被调用的Throttler实例并更改属性


我怎样才能接近节流阀?

好的,我自己想出来的

您需要自己定义节流器实例

Throttler throttler = new Throttler(null, 200);
然后,您可以在如下路由中使用它,因为Throttler实现了处理器接口:

from(myEndpoint) 
.process(throttler)
.to(myOtherEndpoint);

您可以随时更改节流阀的属性。

是的,这是一个很好的解决方案

在Camel 2.0中,您现在可以在路由中导航运行时处理器,从而找到任何节流器,然后能够动态更改它

但我们也在努力改进Camel2.1中的JMX,以便您可以从JMX中更改节流器/延迟器等


还可以改进Navigate API,这样您就可以在一行程序中查找,例如,如果您在路由中提供id,则可以通过id进行查找。或者按类型进行筛选,这样就可以只获取节流阀等。

这就是我最初寻找的解决方案。但据我所知,没有办法把一个“id”放在节流阀上寻找它。在我简单地遍历运行时处理器的测试中,我的代码与路由配置极为耦合,当我更改它时,它将不再运行。是的,驼峰路由中的任何内容都归结为一个处理器,因此您可以像以前那样做。您可以为路由中的处理器分配一个id。from(myEndpoint).throttle(200).id(“myThrottler”)。to(MyTheEndpoint);那么目前缺少的是一个很好的查找Throttler Throttler=context.getProcessorById(“myThrottler”,Throttler.class);//然后根据需要更改节流阀。刚刚创建了一个用于良好查找的票证:CAMEL-2258