9

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

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

  • NDDS - $$,使用 IDL

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

  • JBOSS/ESB——不太熟悉

如果这样的包可以做到以下几点,那就太好了:

  • 基于网络

  • 了解有效载荷数据,用户不必担心字节序/序列化问题

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

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

  • 直观的订阅/主题管理

为了好玩,我创建了自己的. 想法?

4

9 回答 9

5

您可能想查看RabbitMQ

于 2009-07-10T22:28:34.273 回答
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 的博客文章,以更详细地讨论为什么类型和静态类型特别适用于分布式系统。

-交流

于 2010-08-23T08:15:45.310 回答
3

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

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

如果目标语言是静态类型的,我看不出如何绕过预定义数据类型的需要。

于 2009-07-10T22:34:53.107 回答
2

更深入地了解各种 JMS 实现。

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

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

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

于 2009-07-11T01:51:03.113 回答
1

You might be interested in the MUSCLE library (disclaimer: I wrote it, so I may be biased). I think it meets all of the criteria you specified.

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

于 2009-08-08T19:07:17.907 回答
1

我用过的三个:

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

  • Tico Rendezvous -(现在重命名为 EMS?)非常快,使用 UDP,也可以在没有中央服务器的情况下使用。我最喜欢但价格昂贵,需要维护费。

  • ActiveMQ - 我目前正在使用它,但发现它经常崩溃。它还需要一些从 Java 移植的项目,例如 spring.net。它有效,但由于稳定性问题,我不推荐它。

还使用 MSMQ 来尝试构建我自己的 Pub/Sub,但由于它不能开箱即用地处理它,因此您不得不编写大量代码。

于 2010-08-24T18:44:48.993 回答
0

还有 OpenSplice DDS。这个和 RTI 的 DDS 类似,只是它是L GPL!

检查一下

于 2009-09-23T03:33:39.947 回答
0

You might take a look at PubSubHubbub. It's a extension to Atom/RSS to alow pubsub through webhooks. The interface is HTTP and XML, so it's language-agnostic. It's gaining increasing adoption now that Google Reader, FriendFeed and FeedBurner are using it. The main use case is blogs and stuff, but of course you can have any sort of payload.

The only open source implementation I know of so far is this one for the Google AppEngine. They say support for self-hosting is coming.

于 2009-08-08T18:58:51.853 回答
0

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

于 2013-10-14T13:01:30.647 回答