【问题标题】:Apache Camel - How to configure endpoint with attributes in javaApache Camel - 如何在 java 中使用属性配置端点
【发布时间】: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


【解决方案1】:

希望对你有帮助:

 from("{{consumer.serviceName}}:queue:{{consumer.notificationQueue}}?{{consumer.queryParams}}").id("from_")
            .log(LoggingLevel.INFO, loggerObject, "Messages throttling from Queue")
            .throttle(constant("{{maximumRequestsPerSecond}}")).timePeriodMillis(1000)//pass throttle.timePeriod parameter from your config here
            .log(LoggingLevel.INFO, loggerObject, "Consuming notification message from Queue {{consumer.myQueue}} : ${body}")
            .bean(beanObject, "process").id("beanId")
            .end();

【讨论】:

  • 没有。请检查我的问题,我已经编写了 java 代码。我必须修改以在其中添加油门属性
  • 我问过你关于迁移的问题。你说是的。我给了你根据guide 创建的 java 骆驼路线,如你所问的那样,带有“日志和油门属性”(如所讨论的 XML 路线)。有问题的代码的第二部分看起来不像路由构建器。你想要什么并不完全清楚。
  • 我的问题中编写的 java 代码已经可以工作了。我必须找到一种在其中添加“throttle”属性的方法(就像我在 XML 中添加的方式一样)
  • 当然它是有效的,因为你创建了消费者并开始消费。它相当于带有 2 个端点的路由(从 -> 到处理器)。现在您想要更多端点,但仍然不想使用路由构建器。任何时候您都可以从 LogEndpont 创建 Throttler 作为处理器和 LogProducer,并使用这 4 个对象依次手动设置它们来构建路由,但这是疯狂的方式。
  • 您能否修改您的答案以添加您建议的代码示例?我对 Camel 比较陌生,很难理解您的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2016-04-14
  • 1970-01-01
  • 2015-06-20
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多