2009-07-10 13 views
9

Ich bin auf dem Markt für eine gute Open-Source-Netzwerk-basierte Pub/Sub (Observer Pattern) -Bibliothek. Ich habe keine gefunden Ich mag:Beste Publish/Subscribe "Middleware"

  • JMS - gebunden an Java behandelt Nachrichteninhalte als stumme Binärblob

  • NDDS - $$, die Verwendung von IDL

  • CORBA/ICE - Pub/Sub gebaut on-top von RPC, CORBA-API ist nicht intuitiv

  • JBOSS/ESB - nicht allzu vertraut mit

Es wäre schön, wenn ein solches Paket könnte folgendes:

  • Netzwerk basiert

  • Aware von Nutzdaten, sollten Benutzer

  • nicht über Probleme Endian/Serialisierung kümmern müssen

    Unterstützung mehrerer Sprachen

  • keine automatisch generierten Code (C++, Rubin, Java, python wäre schön) (keine IDLs!)

  • Intuitive Zeichnungs-/Themenmanagement

Für Spaß, ich habe created my own. Gedanken?

Antwort

3

Wir verwenden die RTI DDS Implementierung. Es kostet $$, aber es unterstützt viele Parameter der Dienstqualität.

Es gibt eine kostenlose DDS-Implementierung namens OpenDDS, aber ich habe es nicht verwendet.

Ich sehe nicht, wie Sie die Notwendigkeit, Ihre Datentypen vordefinieren, wenn die Zielsprache statisch getippt ist, umgehen können.

+2

Ich habe immer gedacht, dass die Daten XML sein sollten, so ist es teilweise vordefiniert (über ein Schema), aber nicht an eine Sprache gebunden. – David

2

Schauen Sie sich die verschiedenen JMS-Implementierungen etwas genauer an.

Die meisten von ihnen sind nicht nur Java, sie stellen auch Client-Bibliotheken für andere Sprachen zur Verfügung.

Suns OpenMQ hat mindestens eine C++ - Schnittstelle, Apache ActiveMQ bietet clientseitige Bibliotheken für viele gebräuchliche Sprachen.

Wenn es um Nachrichtenformate geht, sind sie normalerweise von der Nachrichten-Middleware selbst abgekoppelt. Sie könnten Ihr eigenes Nachrichtenformat definieren. Sie könnten ein eigenes XML-Schema definieren und XML-Nachrichten senden. Sie könnten BER codierte ASN.1 mit einigen 3. Party-Bibliothek senden, wenn Sie möchten. Oder formatieren und analysieren Sie die Daten mit einer JSON-Bibliothek.

0

Sie können einen Blick auf PubSubHubbub werfen. Es ist eine Erweiterung zu Atom/RSS, um Pubsub über Webhooks zu ermöglichen. Die Schnittstelle ist HTTP und XML, also sprachunabhängig. Google Reader, FriendFeed und FeedBurner verwenden es zunehmend.Der Hauptanwendungsfall sind Blogs und andere Dinge, aber natürlich können Sie jede Art von Nutzlast haben.

Die einzige Open-Source-Implementierung, die ich bisher kenne, ist this one für Google AppEngine. Sie sagen, dass Unterstützung für das Selbsthosting kommt.

1

Sie könnten sich für die MUSCLE-Bibliothek interessiert sein (Disclaimer: Ich habe es geschrieben, also kann ich voreingenommen sein). Ich denke, es erfüllt alle von Ihnen angegebenen Kriterien.

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

0

Es gibt auch OpenSplice DDS. Dieser ist ähnlich wie RTIs DDS, außer dass es L GPL ist!

prüfen it out:

+1

Link zu OpenSplice http://www.opensplice.org/cgi-bin/twiki/view/Community/WebHome – tuergeist

+0

Er sagte: "Kein automatisch generierter Code (keine IDLs!)" – tobsen

4

Wie durch einen früheren Beitrag in diesem Thread hingewiesen-out, eine der Optionen ist OpenSplice DDS, welche Implementierung des OMG DDS Standard (der gleiche Standard implementiert durch NDDS) ein Open Source .

  • Leistung
  • Rich-Unterstützung für QoS (Persistenz, Fehlertoleranz, Rechtzeitigkeit, etc.)
  • :

    Die wichtigsten Vorteile der OpenSplice DDS über die andere Middleware können Sie erwägen, wie zusammengefasst werden

  • Daten Centricity (zB Möglichkeit der Abfrage und Filterung von Datenströmen)

Etwas, das ich verstehen möchte, was mit IDL Ihre Probleme sind. DDS verwendet IDL als sprachunabhängige Methode zum Festlegen von Benutzerdatentypen. DDS ist jedoch nicht auf IDL beschränkt, sondern Sie können XML verwenden. Der Vorteil Ihrer Datentypen spezifizieren, und Entkoppeln ihre Darstellung von einer bestimmten Programmiersprache ist, dass die Middleware kann:

(1) nimmt von Ihnen weg, die Last der Serialisierung Daten,

(2) erzeugen sehr Zeit/Raum effizient Serialisierung

(3) sicherzustellen, End-to-End-Typsicherheit,

(4) ermöglichen, die Inhaltsfilterung auf dem gesamten Datentyp (nicht nur die Header wie in JMS) und

(5) enabl Interoperabilität zwischen den Programmiersprachen (z.B. Java, C/C++, C# usw.)

Abhängig von dem System oder der Anwendung, die Sie entwickeln, sind einige der oben genannten Eigenschaften möglicherweise nicht relevant/relevant. In diesem Fall können Sie einfach einen, ein paar "DDS Type" generieren, der der Inhaber Ihrer serialisierten Daten ist.

Wenn Sie an JMS denken, bietet es Ihnen 5 verschiedene Thementypen, die Sie zum Senden Ihrer Daten verwenden können. Mit DDS können Sie das gleiche tun, aber Sie haben die Flexibilität, genau die Thematypen zu definieren.

Schließlich können Sie überprüfen, this blog entry auf Scala und DDS für eine längere Diskussion darüber, warum Typen und statische Typisierung sind gut, vor allem in verteilten Systemen.

-AC

1

Drei ich verwendet habe:

  • IBM MQ Series - zu teuer, schwer zu arbeiten.

  • Tico Rendezvous - (jetzt umbenannt in EMS?) War sehr schnell, UDP verwendet, könnte auch ohne zentralen Server verwendet werden. Mein Favorit, aber teuer und erfordert eine Wartungsgebühr.

  • ActiveMQ - Ich verwende dies derzeit, aber es stürzt häufig ab. Außerdem benötigt es einige Projekte, die wie Spring.net aus Java portiert wurden. Es funktioniert, aber ich kann es aufgrund von Stabilitätsproblemen nicht empfehlen.

verwendet auch MSMQ in einem Versuch, meine eigenen Pub/Sub zu bauen, aber da sie es Ihre aus der Box nicht verarbeitet eine beträchtliche Menge an Code stecken zu schreiben.

+0

TIBCO Rendezvous und TIBCO EMS sind zwei verschiedene Produkte . EMS ist ein JMS-Provider, der einen oder mehrere zentrale Nachrichtenserver umfasst. Rendezvous ist eine verbindungslose Pub/Sub-Middleware, die keinen zentralen Server hat. Die zwei Produkte sind kostenlos, abhängig von Ihren Anforderungen. – scaganoff

0

IBM Webpshere MQ, und die Lizenz ist nicht zu üppig, wenn Sie auf Unternehmensebene arbeiten.

+1

Das OP bat um eine * Open Source * -Lösung! –