我正在市场上寻找一个基于开源网络的Pub / Sub(观察者模式)库。我没有找到任何我喜欢的东西:
JMS - 与Java绑定,将消息内容视为哑二进制blob
NDDS - $$,使用IDL
CORBA / ICE - Pub / Sub构建在RPC之上,CORBA API不直观
JBOSS / ESB - 不太熟悉
如果这样的包可以达到以下目的,那就太好了:
基于网络
意识到有效负载数据,用户不必担心字节序/序列化问题
多语言支持(C ++,ruby,Java,python会很好)
没有自动生成的代码(没有IDL!)
直观的订阅/主题管理
为了好玩,我created my own。想法?
答案 0 :(得分:5)
您可能需要查看RabbitMQ。
答案 1 :(得分:4)
正如本文前面的帖子所指出的,您的一个选项是OpenSplice DDS,它是OMG DDS标准的开源实现(NDDS实施的相同标准)。
OpenSplice DDS相对于您正在考虑的其他中间件的主要优点可归纳为:
我想了解的是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)
答案 3 :(得分:2)
进一步了解各种JMS实现。
它们中的大多数不仅仅是Java,它们也为其他语言提供客户端库。
Suns OpenMQ至少有一个C ++接口,Apache ActiveMQ为许多常用语言提供客户端库。
当涉及到消息格式时,它们通常与消息中间件本身分离。您可以定义自己的消息格式。您可以定义自己的XML架构并发送XML消息。如果需要,您可以使用某些3.方库发送BER编码的ASN.1。 或者使用JSON库格式化和解析数据。
答案 4 :(得分:1)
你可能对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,如果您在公司级别工作,则许可证不会太昂贵。