Camel处理器中的业务逻辑与服务端点

8
在Camel路由中,我应该考虑将我的业务逻辑放在一个离散托管的Bean端点中,比如消息驱动的Bean或Web服务,而不是只在Camel处理器中实现它吗?
使用Camel仅用于中介和编排,使用处理器作为过滤器,似乎更清晰地分离关注点,而不是作为业务逻辑的容器。然而,我目前不预见需要EJB容器,并且似乎需要一个来托管MDB。
所以,清晰的架构与更小的占用空间、更少的技术之间存在权衡——有人对此有想法、观点或强烈感受吗?
2个回答

11

我通常使用Camel执行以下操作...

  • 任何组件集成(文件,jms,http等)
  • 实现EIP逻辑(基于内容的路由、过滤器、限流等)
  • 基于定时器的进程(使用timerquartz
  • 异常处理(重试逻辑、错误日志记录/通知/排队)

否则,对于自包含的业务逻辑(特别是遗留系统集成),最好使用POJO或WebServices。这有助于可测试性并使您的应用程序更加模块化等。然后,您可以使用Camel执行以下操作...

  • 使用ProcessorsBean BindingCXF与这些服务进行接口交互
  • 将这些服务连接成路由
  • 管理/监视消息流、异常处理

关于长时间运行的进程,Camel可以通过各种异步模式/技术(JMS、CXF、轮询消费者、定时作业等)来促进这一点,并且可以控制线程...

总之,有很多方法可以解决问题。Camel是轻量级、灵活的,并设计用于简化与现有技术的集成,而不是取代它们......祝好运!


谢谢@boday!我的主要问题应该是“在哪里可以干净地放置业务逻辑而不需要携带EJB容器”,我不知道消息驱动的POJO和bean绑定。 :-) - Val Akkapeddi
很酷...没错,POJOs/Beans是所有自定义业务逻辑应该放置的地方...如果想要在测试等方面不涉及Camel,这个方法非常有效... - Ben ODay

1

你应该尝试将路由或过滤等技术性事物与业务逻辑分开。

因此,最重要的部分是不要在同一个类中混合它们。将它们分离成离散的部署单元可能有意义,但不是很重要。

Camel非常适合实现“消息驱动的bean”。只需使用pojos + JAXB注释定义数据结构或从XSD生成它们即可。然后,您可以使用camel pojo messaging将它们连接到http、jms甚至文件端点。

请参见http://www.liquid-reality.de/x/NoBe

当您在OSGi上运行时,一个明显的选择是将您的服务作为OSGi服务提供。Camel然后可以用于一个单独的bundle来将这些服务连接到传输。这样,您可以使您的服务完全成为普通的Java。

您还可以使用CXF将您的服务作为SOAP服务或rest资源提供。虽然camel比JMS更轻量级,并且在高可用性和负载平衡方面具有一些优势,但我更喜欢使用XML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接