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