当前位置: 首页 > 知识库问答 >
问题:

如何正确配置这个骆驼路由XML?

东方国安
2023-03-14
widget_id | widget_name | widget_value
(INT)       (VARCHAR 50)  (INT)
    null

我希望每隔5分钟轮询这个toprocess队列(使用Camel-Quartz),并将这些consumes消息主体中找到的字符串(fizz、buzz等)合并到JDBCselect语句中,该语句查找widget_name与字符串(例如fizz或buzz)匹配的任何小部件。

然后,我要获取从JDBC调用中检索的每个widget记录,并将其放在ready队列中。最后,burninatorbean应该使用ready并将每个WidgetPOJO传递给其burninator#burninate(Widget)方法。

所以总结一下:

  1. 外部进程在toprocess队列
  2. 上放置字符串,如“fizz”
  3. 骆驼-石英作业每5分钟触发一次,并“fizz”(和任何其他)排队
  4. camel-jdbcselect*FROM widgets WHERE widget_name='fizz'-->我怀疑我需要XPath
  5. 假设查询返回25小部件记录
  6. 所有25个都被序列化(binary/json/xml?)并放置在就绪队列
  7. 一个接一个地burninator#burninate(Widget)出列ready,并与下一个出列的Widget
  8. 一起执行

以下是我目前所掌握的,但我知道这是错误的:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>com.myapp.bus</package>
    <template id="camelTemplate"/>
    <route>
        <from uri="quartz://toProcessPollerJob?cron=*+5+*+*+*+?"/>
        <to uri="activemq:toProcess"/>
        <setBody>
            <constant>
                SELECT
                    *
                FROM
                    widgets
                WHERE
                    widget_name = ??? (e.g., fizz, buzz)
            </constant>
        </setBody>
        <marshall>
            <serialization/>
        </marshall>
        <to uri="activemq:ready"/>
        <unmarshall>
            <serialization/>
        </unmarshall>
        <to uri="bean:burninator?method=burninate"/>
    </route>
</camelContext>

有没有骆驼巫师可以在这里给我指明正确的方向(除了参考《骆驼在行动中》中我应该读的那一章;-))。具体地说,我遇到了麻烦:

    null

共有1个答案

曾瀚昂
2023-03-14

你需要使用一些其他的语言而不是常量,因为它只是一个常量。例如,simple、groovy,甚至像velocity这样的模板语言,在这些语言中创建要使用的SQL。

尝试…

<simple>
            SELECT
                *
            FROM
                widgets
            WHERE
                widget_name = '${body}'
</simple>

在http://camel.apache.org/languages可以看到支持的语言吗

 类似资料:
  • 我正在研究spring MVC,并使用Apache camel来集成外部服务。我想使用Apache Camel route进行Webservice调用。 就像我的本地REST服务(http://localhostsmiliex.xx:8080/users)从外部REST服务获取数据(http://xxx:000/users)并希望通过路由获取外部数据。 哪个Apache组件适合Jetty或prod

  • 我的骆驼上下文文件如下所示: 我在应用程序中的各种不同endpoint之间有几条其他路由,它们需要重新传递配置,并且按照预期的方式运行。但是,这个特定的路由类型(从文件到队列)似乎并不遵循我配置的任何重新传递策略。当我关闭ActiveMQ代理时,路由会尝试每6秒重新传递一次文件。: 10:54:17,088 WARN c_demo%5GenericFileOnCompletion 105-org.

  • 我想建模一个接受包含xml消息的tcp请求的Apache Camel路由。 每个消息可能导致大量的响应,这些响应应该在传入的套接字上发回。我在同步模式下使用了camel-netty组件,它适用于单个消息。但是有可能在套接字上发回多条消息吗?基本上是回归前的分裂。 在我的例子中,异常是IllegalArgument,说明endpoint不支持ArrayList作为有效负载。 干杯。

  • 我正在将CSV文件输入集成到一个更大的系统中,我想对其进行设置,以便将CSV中未正确解析的各行(由)发送到医院队列,并将所有其他工作行转换为一个对象并聚合到一个列表中。但是,我很难将

  • 我在MyRouteBuilder中有一条骆驼路线。正在使用ActiveMQ消息的java文件: 我写了一个测试用例如下: 当我运行单元测试用例时,我得到了这个奇怪的错误: 看到这些信息,我尤其感到困惑: 和 虽然我有一个正确的队列名称,但为什么队列显示为?还有,为什么代理url? 我想运行这个单元测试用例,以便它在所有环境中正常运行,如:本地、DIT、SIT、PROD等。因此,我不能负担的经纪人u

  • 我使用部署在ActiveMQ服务内部的Apache Camel模块。 假设我使用Spring DSL并且在文件(简化版)中有路由定义(实现为): 接下来,我在其他XML文件(简化)中配置了骆驼上下文: 我希望使用IoC术语将来自的共享路由(ID=)声明为每个依赖项的实例,因此来自单个骆驼上下文(ID=、、)的每条路由都应该使用该共享路由的自己的实例(ID=),具有单独的内部状态和bean实例等。