【问题标题】:Apache Camel - war project How to process the Queue and set to another queue?Apache Camel - 战争项目如何处理队列并设置到另一个队列?
【发布时间】:2013-09-29 00:53:31
【问题描述】:

我将 Pojo 对象设置为处于战争中的队列(来自独立应用程序),然后在战争中我需要从队列中读取并处理对象。完成后,该对象设置为另一个队列(已处理队列)。战争期间发生的所有处理。所以会有另一个应用程序从已处理的队列中读取并处理对象。

那么处理这种情况的最佳方法是什么?有没有我可以获得的端到端样本?

【问题讨论】:

  • 这当然不是矫枉过正,因为读取和写入 JMS 队列并不容易,您需要编写代码。使用 Camel,可以纯粹用 XML 完成,也可以用几行代码更轻松地完成。
  • 您好克劳斯易卜生,感谢您的 cmets,您能否告诉我如何处理上述情况?处理这个问题的最佳方法是什么?我可以得到任何端到端的样本吗?

标签: apache-camel


【解决方案1】:

只需使用外部 JMS 代理 (ActiveMQ),每个应用程序都可以独立连接到该代理并从队列中生产/使用...这是一种标准/轻量级的方式来连接应用程序与 JMS...

<!--APP1-->
<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
   <from uri="activemq:inQ" />
   <to uri="bean:MyBean" />    
   <to uri="activemq:outQ" />
  </route>
</camelContext>

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
</bean>

<!--APP2-->
<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
   <from uri="activemq:outQ" />
   ...
  </route>
</camelContext>

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
</bean>

查看此页面了解更多详情:http://camel.apache.org/activemq.html

【讨论】:

  • 您好,为什么您建议使用外部 JMS 代理作为 withing camel 本身我可以配置相同的权利?以及如何在不使用 Spring 进行 XML 配置的情况下使用 Java DSL 实现这一点?您也可以发布 Java DSL 示例吗?
  • 我也试过上面的例子。不幸的是,这并没有按我想要的方式工作。当我将我的 bean 设置为 inQ 时,它显示已处理但它没有转到 outQ。有什么想法吗?
  • 我建议使用外部代理,因为您有 2 个应用程序...否则,是的,您可以使用嵌入式代理,但是当 app1 关闭时,app2 无法处理 Q 等...。否则,您只需要确保您的 bean 返回处理后的结果,以便将其添加到 Exchange 并转到 outQ(需要确保其可序列化)
猜你喜欢
  • 2019-12-10
  • 2015-01-19
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
相关资源
最近更新 更多