最佳发布/订阅“中间件”

时间:2009-07-10 22:26:04

标签: soa observer-pattern middleware publish-subscribe mom

我正在市场上寻找一个基于开源网络的Pub / Sub(观察者模式)库。我没有找到任何我喜欢的东西:

  • JMS - 与Java绑定,将消息内容视为哑二进制blob

  • NDDS - $$,使用IDL

  • CORBA / ICE - Pub / Sub构建在RPC之上,CORBA API不直观

  • JBOSS / ESB - 不太熟悉

如果这样的包可以达到以下目的,那就太好了:

  • 基于网络

  • 意识到有效负载数据,用户不必担心字节序/序列化问题

  • 多语言支持(C ++,ruby,Java,python会很好)

  • 没有自动生成的代码(没有IDL!)

  • 直观的订阅/主题管理

为了好玩,我created my own。想法?

9 个答案:

答案 0 :(得分:5)

您可能需要查看RabbitMQ

答案 1 :(得分:4)

正如本文前面的帖子所指出的,您的一个选项是OpenSplice DDS,它是OMG DDS标准的开源实现(NDDS实施的相同标准)。

OpenSplice DDS相对于您正在考虑的其他中间件的主要优点可归纳为:

  • 性能
  • 对QoS的持久支持(持久性,容错性,及时性等)
  • 以数据为中心(例如查询和过滤数据流的可能性)

我想了解的是IDL的问题。 DDS使用IDL作为指定用户数据类型的与语言无关的方式。但是,DDS不仅限于IDL,如果您愿意,也可以使用XML。指定数据类型并将其表示与特定编程语言分离的优点是中间件可以:

(1)带走序列化数据的负担,

(2)生成非常时间/空间有效的序列化,

(3)确保端到端类型安全,

(4)允许对整个数据类型进行内容过滤(不仅仅是JMS中的标题),

(5)启用跨编程语言的线上互操作性(例如Java,C / C ++,C#等)

根据您正在设计的系统或应用程序,上面的某些属性可能没有用/相关。在这种情况下,您可以简单地生成一个,“DDS类型”,它是您序列化数据的持有者。

如果您考虑使用JMS,它会为您提供5种不同的主题类型,您可以使用它们来发送数据。使用DDS,您也可以这样做,但您可以灵活地定义主题类型。

最后,您可能需要查看有关Scala和DDS的this blog entry,以便更长时间地讨论为什么类型和静态类型很好,特别是在分布式系统中。

-AC

答案 2 :(得分:3)

我们使用RTI DDS实现。它的成本为$$,但它支持许多服务质量参数。

有一个名为OpenDDS的免费DDS实现,但我没有使用它。

如果目标语言是静态类型的,我不知道如何解决预定义数据类型的问题。

答案 3 :(得分:2)

进一步了解各种JMS实现。

它们中的大多数不仅仅是Java,它们也为其他语言提供客户端库。

Suns OpenMQ至少有一个C ++接口,Apache ActiveMQ为许多常用语言提供客户端库。

当涉及到消息格式时,它们通常与消息中间件本身分离。您可以定义自己的消息格式。您可以定义自己的XML架构并发送XML消息。如果需要,您可以使用某些3.方库发送BER编码的ASN.1。 或者使用JSON库格式化和解析数据。

答案 4 :(得分:1)

你可能对MUSCLE库感兴趣(免责声明:我写了它,所以我可能有偏见)。我认为它符合您指定的所有标准。

https://public.msli.com/lcs/muscle/

答案 5 :(得分:1)

我曾经使用过三个:

  • IBM MQ系列 - 太昂贵,难以使用。

  • Tico Rendezvous - (现在更名为EMS?)非常快,使用UDP,也可以在没有中央服务器的情况下使用。我最喜欢但很贵,需要支付费用。

  • ActiveMQ - 我现在正在使用它,但发现它经常崩溃。此外,还需要一些像Java一样从Java移植的项目。它有效,但由于稳定性问题我无法推荐它。

还尝试使用MSMQ来构建我自己的Pub / Sub,但由于它没有开箱即用,因此你写了相当多的代码。

答案 6 :(得分:0)

您可以查看PubSubHubbub。它是Atom / RSS的扩展,通过webhook来提升pubsub。接口是HTTP和XML,因此它与语言无关。现在Google Reader,FriendFeed和FeedBurner正在使用它,它正在获得越来越多的采用。主要用例是博客和内容,但当然你可以拥有任何类型的有效负载。

到目前为止,我所知道的唯一开源实现是Google AppEngine的this one。他们表示支持自托管即将到来。

答案 7 :(得分:0)

还有OpenSplice DDS。这个类似于RTI的DDS,除了它是 L GPL!

检查it

答案 8 :(得分:0)

IBM Websphere MQ,如果您在公司级别工作,则许可证不会太昂贵。