【问题标题】:Apache Camel ESB for C# and Java EDA用于 C# 和 Java EDA 的 Apache Camel ESB
【发布时间】:2011-02-23 04:46:09
【问题描述】:
我们正在考虑使用事件驱动架构 (EDA) 集成我们的一些粗粒度业务服务,并且这些服务的服务器端 (REST) 在 Java 和 .NET (C#) 中实现。我们最初认为使用 RabbitMQ(和 AMQP 协议)作为一种中立和开放的方式(在这两种语言中具有良好的客户端支持),但这意味着必须支持 Java 和 CLR 旁边的另一个运行时(Erlang)。我们还在研究 Apache qPid,因为它具有 AMQP 协议的 Java 代理实现,可能会消除这种担忧。
有没有人尝试在 ActiveMQ 之上使用更丰富的 Apache Camel ESB 以 Pub-Sub EDA 方式集成 Java 和 .NET 服务?有
我错过了有关通过此路线的任何其他可能的建议?
谢谢
【问题讨论】:
标签:
c#
esb
amqp
apache-camel
eda
【解决方案1】:
应该很好用!
ActiveMQ 是一个 java 应用程序,但有一个很好的工作 .NET 客户端 API。它应该可以满足您的大部分发布/订阅需求。如果你需要更多的中间逻辑,比如路由,实际上 ActiveMQ 是与 Camel 捆绑在一起的,这样你就可以在 ActiveMQ 实例上执行路由、转换、转换等,通过配置一些 XML(或通过 Java/Scala 代码)。
没有必要直接用 .NET 处理 Camel,因为无论如何都应该通过 ActiveMQ 进行通信。 ActiveMQ/Camel 组合对于此类任务非常强大 - 而且它是免费的。
【解决方案2】:
如果您正在寻找的只是一个支持 EDA 的消息传递平台,那么 Camel 并不是绝对必要的。 Camel 是一个框架,用于在不同的有效负载格式之间进行转换,在 Web 服务、消息传递、RSS 提要和关于160 others 之间进行路由。
根据您上面的问题,ActiveMQ 应该能够处理您描述的开箱即用的用例。
从客户端的角度来看,ActiveMQ 库支持 Java(JMS - the 标准)和 C++/C#(CMS/NMS - JMS 的几乎完全相同的副本)。通过 (pretty much also standard) STOMP 协议支持其他语言(Ruby、Python、Javascript 等)。
我曾在混合的 .Net/Java 环境中使用 ActiveMQ,它完全按照它在锡上所说的那样工作。所有这些都在一个不错的 Java 运行时中,可以通过 JMX 使用您最喜欢的监控工具进行检测。
【解决方案3】:
我为我的 .net 应用程序创建了一个 java 端点适配器。 .net 应用程序将 xml 或 json 消息发布到骆驼端点,在我的例子中是 TibcoEMS 主题。所有的路由/过滤/丰富/...都在骆驼内部处理。然后将交换放置在另一个端点上,以便由 java 应用程序检索。
【解决方案4】:
Camel 真正出色的 ESB 用例之一是“路由”。据我所知,骆驼路由引擎没有.NET 端口。因此,您将无法在 .NET 端使用 Camel 的路由功能。
但是,camel 支持各种交换格式,如 json、xml 和 pojos。您应该能够使用 xml 或 json 作为交换格式来实现 Java 和 .NET 之间的互操作性。