【发布时间】:2018-10-01 08:19:31
【问题描述】:
下面是我在 XML 中完美运行的 Camel 路线
<route id="someId">
<from id="_from" uri="{{consumer.serviceName}}:queue:{{consumer.notificationQueue}}?{{consumer.queryParams}}"/>
<log loggerRef="loggerId" message="Messages throttling from Queue"/>
<throttle prop:timePeriodMillis="{{throttle.timePeriod}}">
<constant>{{throttle.maximumRequestsPerSecond}}</constant>
<log loggerRef="logger" message="Consuming notification message from Queue {{consumer.myQueue}} : ${body}"/>
<bean id="beanId" method="process" ref="MyProcessor"/>
</throttle>
</route>
现在,我想用 Java 编写一个类似的骆驼端点。 你能告诉我如何在其中添加日志和节流属性吗?
MyProcessor messageProcessor;
String Uri = serviceName + ":queue:" + queueName + "?" + queryParams;
Endpoint ep = camelContext.getEndpoint(Uri);
Consumer consumer = ep.createConsumer(messageProcessor);
consumer.start();
【问题讨论】:
-
您的意思是将您的 xml 路由迁移到 java dsl 样式?
-
是的,有点。实际上,另一个模块的代码是使用 Java DSL 编写的,所以我想在那里使用 Java,而不是用 XML 重构整个模块
-
这是一些生产代码还是用于测试的代码? Camel 提供了一个 adviceWith 构造,您可以在其中更改运行时的路线。此功能主要用于测试 Camel 的东西,至少我还没有在生产代码上尝试过,但你可能会试一试。如果你真的很感兴趣,你可以检查一下编织路线在幕后做了什么,然后在你的代码中进行
-
这是出乎意料的,@Bhuvan。我相信您将能够耐心地做到这一点,但我认为您不会找到太多帮助。正如您所熟悉的,Camel 支持多种定义路线的方法,但您尝试的不是其中之一。恕我直言,您的方法让我认为您不愿意学习如何使用骆驼,因为它是打算使用的,而是强迫它符合您的期望。
-
@DavidS 我明白了,但我不想修改已经编写好的在生产中运行的框架代码。
标签: java apache-camel amq