akka-camel 2.2.1 使用 Spring XML 定义路由

2024-02-22

我使用的是 akka-camel 2.2.1,需要分别配置往返于 Consumer 和 Producer Actor 的路由。我目前正在定义路由并以编程方式将它们添加到 CamelExtension 内的内部 Camel 上下文中,如下所示:

camel.context.addRoutes(new RouteBuilder { 
    def configure() = {
      from("file:/tmp?include=whatever.*.log&noop=true&sendEmptyMessageWhenIdle=true")
        .split(body(classOf[String]).tokenize("\n"))
        .streaming()
        .to("seda:input-route")

      from("seda:update-route")
        .to("bean:db-update-bean?method=process")
  }})

我有一个扩展 Consumer 的 Actor,它通过其 endPointUri 从“seda:input-route”读取,还有另一个扩展 Producer 的 Actor,写入“seda:update-route”。 “db-update-bean”在 Spring applicationContext.xml 中定义,如下所示:

<bean id="db-update-bean" class="nz.co.whatever.DBUpdate">
    <constructor-arg ref="jdbcTemplate"/>
    <constructor-arg value="some_other_constructor_arg"/>
</bean>

Spring 上下文在由 akka.Main 启动的监督 Actor 中加载并启动。然而(这是可以理解的),Camel 不知道这个 Spring 上下文,因此竭尽全力告诉我它不知道“db-update-bean”是什么:

2013-10-11 08:55:09,614 [SedaConsumer ] WARN 处理交换时出错。交换[消息:1378642997698,27684,true,57.000000,0.750000,97]。造成原因: [org.apache.camel.NoSuchBeanException - 在注册表中找不到 db-update-bean 的 bean]

当然,我可以以编程方式将组件添加到 akka 提供的 CamelContext 中,或者执行如下操作:

    from("seda:update-route")
      .bean(new DBUpdate(jdbcTemplate, "gps_temp_status"), "process")

但我宁愿使用Spring来定义bean。显然,CamelExtension 需要使用 Spring 定义的 CamelContext,而不是创建自己的 CamelContext。

此外,更重要的是,我想将 Camel 路由的定义外部化到同一 applicationContext.xml 中<CamelContext/>标签。根据诸如https://weblogs.java.net/blog/manningpubs/archive/2013/02/13/akka-and-camel https://weblogs.java.net/blog/manningpubs/archive/2013/02/13/akka-and-camel,似乎这样做的方法是实例化一个“camel-service”bean并注入Spring定义的CamelContext,如下所示:

<camel:camelContext id="camelContext">   
</camel:camelContext>

<akka:camel-service id="camelService">                             
    <akka:camel-context ref="camelContext" />
</akka:camel-service>

这是轮子脱落的地方。根据 Roland Kuhn 的回复为什么 akka 的 spring 集成文档仅存在于 1.3.1 而不适用于后续版本 https://stackoverflow.com/questions/16948292/why-spring-integration-doc-for-akka-exists-only-for-1-3-1-but-not-for-next-versi,akka-spring 库不包含在 Akka 2.2.1 中,因此 akka 没有 Spring 命名空间处理程序,并且我无法实例化这个骆驼服务 bean。虽然不是因为缺乏尝试。或者咒骂。

所以(最后)问题是:如何在 Spring XML 中定义 Camel 路由,其端点可以由消费者或生产者 Actor 使用 akka-camel 2.2.1 而不使用 akka-spring 使用?是否可以实例化一个工厂 bean,该工厂 bean 会生成一个带有注入 CamelContext 的 CamelService 或其他类似的巫术?其次(但相关)如果我被迫通过 RouteBuilder 定义它们,如何使用 Spring 实例化要在骆驼路由中引用的 bean?

提前致谢。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

akka-camel 2.2.1 使用 Spring XML 定义路由 的相关文章

随机推荐

  • Selenium:启动服务器时出现无效的“已经运行”错误

    我正在尝试启动并运行 Selenium 服务器 但是 当我输入 java jar selenium server standalone 2 0b3 jar 我得到一个例外 Selenium 已经在端口 4444 上运行 或者其他一些服务正在
  • 如何限制进程的CPU使用率

    我想创建一个程序 即使在计算机空闲时也可以限制进程的 CPU 使用率 我编写了一个设置进程优先级的程序 但是如果计算机空闲 cpu使用率可以达到95 该进程包含 元素 是我要限制的进程 private static readonly str
  • HEREDOC 干扰代码缩进

    我喜欢 HEREDOC 语法 例如对于生成的 HTML 的边缘情况 不值得放入模板中 不过 唯一让我烦恼的是定界符字符串的内容和结束标记遵循第一列 这会搞乱嵌套代码布局 class myclass function construct a
  • 如何检查用户何时在 Firebase 中通过了电话身份验证?

    我有一个 Android 应用程序 用户在应用程序中使用他们的电话号码注册 我使用 Firebase 在身份验证中存储他们的电话和电子邮件 并且我还在实时数据库中保存他们的电话 全名和电子邮件 实时数据库的结构如下 Auto Generat
  • 如何在 Rails 4 中设置自定义字符串外键?

    如何设置关联以使用字符串foreign key正确设置has one class Pharmaceutic lt ActiveRecord Base has one pharmaceutic group foreign key code e
  • 使用 Prawn 在 pdf 中添加图像

    我在使用 Prawn 作为 pdf 生成器将图像添加到 PDF 时遇到问题 我正在尝试使用以下代码添加图像 def header text something image Prawn DATADIR images logo small pn
  • 将 R 中的值列表替换为另一个值列表

    我有一个包含任何这些值的数据框 from c A C G T R Y M K W S N 我想相应地替换为 to c AA CC GG TT AG CT AC GT AT CG NN 最好的方法是什么 循环替换所有值 或循环矩阵位置 或任何
  • 与接口同名的 TypeScript 类

    我想声明一个名为Date它有一个 Date 类型的属性 如 JavaScript 的 TypeScript 接口 日期对象 https developer mozilla org en US docs Web JavaScript Refe
  • 错误 LNK1104:无法打开文件“mfc90.lib”

    我正在使用 Visual Studio 2012 Professional 我的项目参考使用 VS2008 v90 构建的静态库 当我使用 VS2012 v110 构建时 error LNK1104 cannot open file mfc
  • 构造函数不接受我的信息

    所以构造函数是说 是预期的 错误不是声明 并且 预期的 Person num1 num2 num3 num1 new Person Allison 6600 Crescent Ave 32 9024231421 num2 new Perso
  • 最大夏普比率投资组合因 PortfolioAnalytics 中的错误而失败

    在计算简单的最大夏普比率投资组合权重时 我在 PortfolioAnalytics 中遇到了一个问题 Error in max sr opt R R constraints constraints moments moments Objec
  • Python:在曲线和轴之间填充颜色并区域化区域

    我在 Excel 工作表上有两条曲线的一组 x y 值 使用xlrd模块 我已经能够将它们绘制如下 问题 如何使用不同的填充颜色对三个区域进行着色 曾尝试过fill between但由于不知道如何与x轴和y轴关联而没有成功 心中的结局如下图
  • PHP:如何删除索引后的所有数组元素[重复]

    这个问题在这里已经有答案了 是否可以删除索引后的所有数组元素 myArrayInit array 1 gt red 30 gt orange 25 gt velvet 45 gt pink 现在一些 魔法 myArray delIndex
  • PySide:如何在 QPushButton 单击槽中获取单击的 QPushButton 对象?

    我是 PySide 的新手 我想在其单击的插槽中获取 QPushButton 对象 例如使用它来获取其文本 button QtGui QPushButton start go button clicked connect self butt
  • 如何向引用添加事件监听器?

    如何添加事件监听器ref使用 ReactJS Hooks 版本 16 8 这是一个示例 我尝试使用 Overflow auto 获取某些 div 的滚动位置 updateScrollPosition永远不会被叫到 function Exam
  • MongoDB minidump文件路径错误

    我最近卸载了 MongoDB 3 2 以安装 MongoDB 3 6 从那时起 每次我尝试启动 mongod 时 都会收到以下错误 failed to open minidump file C Program Files MongoDB S
  • 如何正确重用 Jackson ObjectMapper?

    我对 ObjectMapper 的工作方式以及在我的应用程序中的一般使用感到满意 我想了解的是实现 ObjectMapper 以确保它被重用并且我不会在应用程序中创建不必要的实例的最佳方法 我的想法是 我可以在 Utils 类中声明 Obj
  • RxJS SkipWhile 与过滤器

    SkipWhile 和过滤器运算符有什么区别 const source interval 1000 const example source pipe skipWhile val gt val lt 5 const subscribe ex
  • 这是一个什么样的对象,反应式的?

    我的 Server R 中有这段代码 selection1 lt reactive filter filter DF1 PC in input dynamic AGE gt input age 1 AGE lt input age 2 DF
  • akka-camel 2.2.1 使用 Spring XML 定义路由

    我使用的是 akka camel 2 2 1 需要分别配置往返于 Consumer 和 Producer Actor 的路由 我目前正在定义路由并以编程方式将它们添加到 CamelExtension 内的内部 Camel 上下文中 如下所示