Saturday 18 November 2017

Zeromq Binary Options


3 Jahre später, eine Notiz für Menschen, die durch hier. Darüber nachzudenken, warum Sie Message-Queuing-Middleware verwenden möchten. Wenn der Grund darin besteht, Aufgaben innerhalb eines Clusters zu verteilen, schauen Sie sich Celery an. Es arbeitet auf einer höheren Ebene der Abstraktion als MQ-Stil-Lösungen, verwendet RabbitMQ, um Nachrichten zu verschieben, hat aber hervorragende Unterstützung für Taskspezifische Semantik. Ndash Chris Johnson Meine erste Antwort hatte einen starken Fokus auf AMQP. Ich beschloss, es umzuschreiben, um eine umfassendere Sicht auf das Thema bieten. Diese 3 Messaging-Technologien haben unterschiedliche Ansätze für den Aufbau verteilter Systeme: RabbitMQ ist eine der führenden Implementierung des AMQP-Protokolls (zusammen mit Apache Qpid). Daher implementiert es eine Broker-Architektur, was bedeutet, dass Nachrichten auf einem zentralen Knoten anstehen, bevor sie an Clients gesendet werden. Dieser Ansatz macht RabbitMQ sehr einfach zu bedienen und zu implementieren, weil fortgeschrittene Szenarien wie Routing, Lastverteilung oder persistente Nachrichtenwarteschlange in nur wenigen Zeilen Code unterstützt werden. Allerdings macht es auch weniger skalierbar und langsamer, da der zentrale Knoten Latenz hinzufügt und Nachrichtenumschläge ziemlich groß sind. ZeroMq ist ein sehr leichtes Messaging-System speziell für hohe Durchsatz / niedrige Latenz Szenarien wie die, die Sie in der Finanzwelt finden können. Zmq unterstützt viele erweiterte Messaging-Szenarien, aber im Gegensatz zu RabbitMQ, youll müssen die meisten von ihnen selbst durch die Kombination verschiedener Teile des Frameworks implementieren (z. B. Sockets und Geräte). Zmq ist sehr flexibel, aber youll müssen die 80 Seiten oder so des Leitfadens (die ich empfehlen, lesen für jedermann schreiben verteiltes System, auch wenn Sie nicht verwenden Zmq) bevor sie in der Lage, etwas komplizierter als das Senden von Nachrichten zwischen 2 Peers. ActiveMQ befindet sich im Mittelgrund. Wie Zmq kann es sowohl mit Broker - als auch P2P-Topologien eingesetzt werden. Wie RabbitMQ, ist es einfacher, erweiterte Szenarien zu implementieren, aber meist auf Kosten der Rohleistung. Sein das Schweizer Armeemesser des Messaging :-). Schließlich haben alle 3 Produkte: haben Client-Apis für die gängigsten Sprachen (C, Java, Net, Python, Php, Ruby,) haben eine starke Dokumentation sind aktiv unterstützt Antworten Nawaz 207k 9679 65 9679 459 9679 666 Während zutreffend, bin ich nicht sicher, ob Annahme von AMQP starke Korrelation mit der ursprünglichen Frage hat. Ich denke, es gibt wichtigere Überlegungen für die Wahl einer Message Queue als das, was zugrunde liegenden Draht-Protokoll verwendet. Ndash StaxMan Mai 13 10 am 22:26 Die Frage doesn39t erwähnen, dass AMQP, aber diese Antwort ist auf AMQP konzentriert. Wenn wir JMS als Anforderung annehmen sollten, dann wäre die Antwort im Grunde umgekehrt: ActiveMQ ist beliebt, RabbitMQ hat einige Unterstützung, die wahrscheinlich funktionieren sollte. Wenn kein Drahtprotokoll angenommen wird: siehe andere Antworten. Ndash Fletch Dec 2 10 at 10:53 Nachdem ich in RabbitMQ und ActiveMQ gearbeitet habe, würde ich empfehlen, bleiben Sie weg von ActiveMQ. Die Releases sind sehr buggy, und ich hatte kein Ende der Probleme mit Maschinen gehen und Speicherverluste etc. RabbitMQ auf der anderen Seite funktioniert einfach. Nachdem ich es in I39ve gesteckt hatte, musste ich es nie wieder ansehen. Es macht einfach, was es braucht. Message Queue Servers Message Queue-Server sind in verschiedenen Sprachen verfügbar, Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling oder Sparrow), Scala (Kestrel, Kafka) oder Java (ActiveMQ). Eine kurze Übersicht finden Sie hier geschrieben von Alex MacCaw Sparrow ist eine leichte Warteschlange in Ruby geschrieben, dass Memcache geschrieben von Blaine Cook auf Twitter Starling ist ein Message Queue-Server auf MemCached geschrieben in Ruby speichert Jobs in Arbeitsspeicher (Message Queue) Dokumentation: Einige gute Tutorials, zum Beispiel die Schienen über Starling und Workling oder diesen Blog-Post über Starling geschrieben von Robey Pointer Starling Klon in Scala geschrieben (ein Hafen von Starling von Ruby zu Scala) Warteschlangen werden im Speicher gespeichert, aber angemeldet auf der Festplatte RabbitMQ ist ein Message Queue-Server in Erlang speichert Aufträge im Speicher (Nachrichtenwarteschlange) ActiveMQ ist ein Open-Source-Message-Broker in Java, geschrieben von Philotic, Inc., um die Reaktionszeit einer Facebook-Anwendung in Arbeitsspeicher-Arbeitsstelle zu verbessern Hauptsächlich in C geschrieben Docu: nubyonrails / Artikel / about-this-Blog-Beanstalk-Messaging-Warteschlange Geschrieben in LinkedIn in Scala Verwendet von LinkedIn to Offload Verarbeitung aller Seiten und andere Ansichten Defaults mit Persistenz, verwendet OS Disk-Cache für Hot-Daten (hat höhere Durchsatz dann eine der Oben über die Beibehaltung aktiviert) Unterstützt sowohl on-line als Offline-Verarbeitung Die Socket-Bibliothek, die als Parallelität Framework fungiert Schneller als TCP für Cluster-Produkte und Supercomputing Tragt Nachrichten über inproc, IPC, TCP und Multicast Connect N-to-N Asynch I / O für skalierbare Multicore Message-passing Anwendungen EagleMQ ist ein Open Source, leistungsstarker und leichter Warteschlangenmanager. Geschrieben in C Speichert alle Daten im Speicher und unterstützt die Persistenz. Es hat sein eigenes Protokoll. Unterstützt die Arbeit mit Warteschlangen, Routen und Kanälen. IronMQ Geschrieben in Go Komplett verwalteter Warteschlangen-Service Erhältlich sowohl als Cloud-Version und on-premise Ich hoffe, dass dies hilfreich für uns. Quelle Michael - wollen ein wenig mehr ausarbeiten Das Problem ist die Echtzeit-Lieferung in einem Gruppen-Chat-System. Wenn ich verstehe, richtig, you39re reden über einen dauerhaften Speichermechanismus für Nachrichten als Endpunkt (Posteingang) Wenn ja, dann doesn39t passen die Rechnung, sie wollen Chat sofort geliefert werden, und Clients, um direkte Abonnenten werden Soweit ich sagen kann Mit einer Tonne von themenbasierten Warteschlangen ist kein optimierter Anwendungsfall ndash Josh Oct 16 10 at 20:38 Es hängt wirklich von Ihrem Use-Case ab. Der Vergleich von 0MQ mit ActiveMQ oder RabbitMQ ist nicht fair. ActiveMQ und RabbitMQ sind Messaging-Systeme, die Installation und Administration benötigen. Sie bieten featurewise viel mehr als ZeroMQ. Sie haben echte anhaltende Warteschlangen, Unterstützung für Transaktionen etc. ZeroMQ ist eine leichte Nachrichten orientierte Socket-Implementierung. Es ist auch für die asynchrone In-Prozess-Programmierung geeignet. Es ist möglich, ein Enterprise Messaging System über ZeroMQ auszuführen, aber Sie müssten viel auf eigene Faust implementieren. ActiveMQ, RabbitMQ, Websphere MQ amp MSMQ sind Enterprise Message Queues ZeroMQ ist eine nachrichtenorientierte IPC-Bibliothek. Theres ein Vergleich zwischen RabbitMQ und ActiveMQ hier. Out of the box, ist ActiveMQ so konfiguriert, dass die Zustellung der Nachricht garantiert - die den Eindruck vermitteln kann, seine langsame im Vergleich zu weniger zuverlässigen Messaging-Systeme. Sie können immer die Konfiguration für die Leistung ändern, wenn Sie es wünschen und mindestens so gute Leistung wie jedes andere Messaging-System. Zumindest haben Sie diese Option. Es gibt viele Informationen über die Foren und die ActiveMQ FAQ zur Konfiguration für Skalierung, Performance und Hochverfügbarkeit. Außerdem unterstützt ActiveMQ AMQP 1.0, wenn die Spezifikation abgeschlossen ist, zusammen mit anderen Drahtformaten, wie STOMP. Ein weiteres Plus für ActiveMQ ist sein ein Apache-Projekt, so gibt es Vielfalt in der Entwickler-Community - und es ist nicht an ein Unternehmen gebunden. Ich habe nicht verwendet ActiveMQ oder RabbitMQ, sondern haben ZeroMQ verwendet. Der große Unterschied, wie ich sehe es zwischen ZeroMQ und ActiveMQ etc. ist, dass 0MQ brokerless ist und nicht in der Zuverlässigkeit für die Nachrichtenübermittlung gebaut hat. Wenn Sie nach einer einfach zu bedienenden Messaging-API suchen, die viele Messaging-Muster, Transporte, Plattformen und Sprachbindungen unterstützt, dann ist 0MQ definitiv einen Blick wert. Wenn Sie nach einer durchgebrannten Messaging-Plattform suchen, dann kann 0MQ nicht die Rechnung passen. Siehe zeromq. org/docs:cookbook für viele Beispiele, wie 0MQ verwendet werden kann. Ich eine erfolgreich mit 0MQ für Nachricht, die in einem Stromverbrauch Monitoring-Anwendung (siehe rwscott. co. uk/2010/06/14/currentcost-envi-cc128-part-1/) beantwortet Aug 24 10 at 7:28 Im mit zeroMQ . Ich wollte eine einfache Nachricht übergeben System und ich brauche nicht die Komplikation eines Maklers. Ich wünsche auch nicht ein großes Java orientiertes Unternehmenssystem. Wenn Sie ein schnelles, einfaches System wollen und Sie müssen mehrere Sprachen unterstützen (ich benutze C und. net) dann Id empfehlen, bei 0MQ. Beantwortet Jul 28 10 at 16:18 Auch mit ZMQ in C / C-Umgebung. Sehr schnell. Verwenden des Maklers. Eine gute Passform für unsere Echtzeit-VOIP-Watch-Dog-App mit Mikro-pmts für Farmen von kamailio SIP-Servern. Pretty sure konnte ich einen sehr hoch entwickelten Vermittler using ZMQ schreiben, aber würde einige zusätzliche Produkte auswerten, bevor ich mich dazu verpflichte. Ndash RocketRoy Ich kann nur meine 2 Cents über ActiveMQ aber da dies eine der beliebtesten ist: Die Sprache, die Sie schreiben möchten, ist wichtig. Obwohl ActiveMQ einen Client für die meisten hat, ist ihre C-Implementierung bei weitem nicht vollständig im Vergleich zur Java-Bibliothek. Dies bedeutet, dass einige grundlegende Funktionalität flockig ist (Fail-Over-Protokoll, das in manchen Fällen fehlschlägt, keine Redelivery-Unterstützung) und andere einfach nicht da ist. Da. NET scheint nicht alle, die wichtig für das Projekt zu sein, ist die Entwicklung ziemlich langsam und es scheint nicht zu jedem Release-Plan. Trunk ist oft gebrochen so, wenn Sie dies berücksichtigen, möchten Sie vielleicht erwägen, einen Beitrag zum Projekt, wenn Sie wollen, dass die Dinge voranzutreiben. Dann gibt es ActiveMQ selbst, die eine Menge von netten Features, aber einige sehr seltsame Fragen aswell hat. Wir verwenden die Sicherung (Progress) - Version von activemq aus Stabilitätsgründen, aber selbst dann gibt es ein paar seltsame Fehler, die Sie im Auge behalten möchten: Broker, die das Senden von Nachrichten in einigen Fällen beenden Journal Fehler, die die Warteschlange zeigen Nachrichten, die nicht da sind (Sie bekommen nicht an den Verbraucher geliefert, aber immer noch) Priorität ist noch nicht implementiert (ist auf der Issues-Liste seit Beginn der menschlichen Art) etc. etc. Alles in allem ist es ein ziemlich schönes Produkt, wenn man mit seiner leben kann Probleme: A) haben keine Angst, aktiv zu engagieren bei der Verwendung von. NET B) in Java entwickeln -) antwortete 29 Okt 09 um 9:47 Minor Update: Seit einiger Zeit ist KahaDB der Standard-Persistenzspeicher für ActiveMQ. Allerdings: Es ist überhaupt nicht stabil. In unseren Tests haben wir Datenbank-Korruption (einige restaurierbar, andere kostet uns etwa 15.000.000 Nachrichten) Achtung DIESES ndash Noctris Apr 4 11 at 8:25 ZeroMQ ist wirklich mit Null Warteschlangen Es ist ein wirklich Fehler Es nicht hav-Warteschlangen , Themen, Persistenz, nichts Es ist nur eine Middleware für Sockets API. Wenn es ist, was Sie suchen cool ansonsten vergessen, es ist nicht wie activeMQ oder rabbitmq. Es gibt einen Vergleich der Eigenschaften und Leistung von RabbitMQ ActiveMQ und QPID gegeben bei bhavin. directi / rabbitmq-vs-apache-activemq-vs-apache-qpid / Ich persönlich habe alle oben genannten drei versucht. RabbitMQ ist die beste Leistung weise nach mir, aber es hat keine Failover-und Recovery-Optionen. ActiveMQ hat die meisten Funktionen, ist aber langsamer. Aktualisieren. HornetQ ist auch eine Option, die Sie aussehen können, ist es JMS Beschwerde, eine bessere Option als ActiveMQ, wenn Sie für eine JMS-basierte Lösung suchen. Ich schrieb über meine erste Erfahrung in Bezug auf AMQP, Qpid und ZeroMQ hier: Ron. shoutboot / 2010/09/25 / is-ampq-for-you / Meine subjektive Meinung ist, dass AMQP ist in Ordnung, wenn Sie Wirklich brauchen die persistente Messaging-Einrichtungen und ist nicht zu besorgt, dass der Broker kann ein Engpass sein. Auch C-Client fehlt derzeit für AMQP (Qpid nicht gewinnen meine Unterstützung nicht sicher über die ActiveMQ-Client jedoch), aber vielleicht in Arbeit. ZeroMQ kann anders sein. Ich habe ActiveMQ in einer Produktionsumgebung für ca. 3 Jahre verwendet jetzt. Während es die Arbeit erledigt, Ausrichten von Versionen der Client-Bibliotheken, die ordnungsgemäß funktionieren und fehlerfrei sind, kann ein Problem sein. Waren derzeit auf der Suche nach Umstellung auf RabbitMQ. Beantwortet Mai 14 11 at 18:12 Es gibt einige Diskussionen in den Kommentaren dieses Blog-Post. Über Twitter schreiben ihre eigenen Nachrichten-Warteschlange, die interessant sein kann. Steve hat umfangreiche Belastungs - und Stress-Tests von ActiveMQ, RabbitMQ, etc. ActiveMQ ist eigentlich ziemlich langsam (viel langsamer als Kestrel), RabbitMQ konsequent Abstürze mit zu vielen Produzenten und zu wenig Verbraucher. Sie haben wahrscheinlich nicht Twitter-like Last zunächst aber :) Antwort # 2 am: April 8, 2009, um 20:33 Uhr Nur wenige Anwendungen haben so viele Tuning-Konfigurationen wie ActiveMQ. Einige Features, die ActiveMQ hervorheben, sind: Konfigurierbare Prefetch-Größe. Konfigurierbares Einfädeln. Konfigurierbares Failover. Konfigurierbare administrative Benachrichtigung für die Erzeuger. Details zu: beantwortet Abie, es kommt alles auf Ihren Anwendungsfall. Anstatt sich auf jemand elses Konto ihrer Verwendung Fall, fühlen Sie sich frei, um Ihre Anwendung Fall auf die rabbitmq-diskutieren Liste. Fragen auf Twitter erhalten Sie einige Antworten zu. Beste Wünsche, alexis beantwortet Mai 18 09 at 13:07 Über ZeroMQ aka 0MQ, wie Sie vielleicht schon wissen, ist es die eine, die Ihnen die meisten Nachrichten pro Sekunde (sie waren etwa 4 Millionen pro Sekunde auf ihrem Ref Server letzten Mal I Geprüft), aber wie Sie vielleicht auch schon wissen, ist die Dokumentation nicht vorhanden. Sie haben eine harte Zeit zu finden, wie die Server (n) starten, geschweige denn, wie sie zu benutzen. Ich denke, das ist teils warum niemand über 0MQ beigetragen hat. Beantwortet Mai 15 10 am 3:06 Es gibt Beispiele im Kochbuch zeromq. org/docs:cookbook und es gibt ein Handbuch api. zeromq. org/zmq. html. Ndash Nick Jul 28 10 at 16:13 während zmq ist schnell und haben eine einfache API, denken Sie daran: keine Persistenz, keine Transaktionen. Keine Erkennung falscher oder langsamer Verbraucher (Nachrichten werden einfach ohne Benachrichtigung des Produzentenprogramms gelöscht). Sidenote: zmq ist serverless, so dass Sie nicht finden docs zum Starten der Server. Sie haben einen Proxy-Server, wenn Sie Bedarf für so etwas aber. Ndash nos Jul 28 10 at 16:33 Wenn Sie auch Interesse an kommerziellen Implementierungen haben, sollten Sie einen Blick auf Nirvana von my-channels. Nirvana wird in der Finanzdienstleistungsbranche in großem Maßstab für Low-Latency-Trading - und Preisverteilungsplattformen eingesetzt. Es gibt Unterstützung für eine breite Palette von Client-Programmiersprachen in den Unternehmens-, Web - und Mobildomänen. Die Clustering-Fähigkeiten sind extrem fortschrittlich und einen Blick wert, wenn transparente HA - oder Lastverteilung für Sie wichtig ist. Achtung: Alle Optionen, mit Ausnahme von ZMQSUBSCRIBE, ZMQUNSUBSCRIBE, ZMQLINGER, ZMQROUTERMANDATORY und ZMQXPUBVERBOSE, wirken sich nur auf die nachfolgende Socket-Bindung aus / Verbindet. Beschreibung Die Funktion zmqsetsockopt () legt die Option fest, die durch das Argument optionsname auf den Wert gesetzt wird, auf den das optionvalue-Argument für den MQ-Socket zeigt, auf den das Socket-Argument zeigt. Das optionlen-Argument ist die Größe des Optionswertes in Bytes. Mit der Funktion zmqsetsockopt () können die folgenden Socket-Optionen eingestellt werden: ZMQSNDHWM: Hohe Markierung für ausgehende Nachrichten setzen Mit der Option ZMQSNDHWM wird die High-Water-Markierung für ausgehende Nachrichten auf dem angegebenen Socket gesetzt. Die hohe Wassermarke ist eine harte Grenze für die maximale Anzahl von ausstehenden Nachrichten, die MQ im Speicher für jeden einzelnen Peer anstehen soll, mit dem der angegebene Socket kommuniziert. Wenn diese Grenze erreicht ist, muss die Steckdose in einen Ausnahmezustand gelangen und je nach Sockeltyp MQ geeignete Maßnahmen ergreifen, wie etwa das Sperren oder Absenken von gesendeten Meldungen. Einzelheiten über die genaue Aktion für jeden Socket-Typ finden Sie in den einzelnen Socket-Beschreibungen in zmqsocket (3). MQ garantiert nicht, dass der Socket so viele wie ZMQSNDHWM-Nachrichten akzeptiert, und die tatsächliche Grenze kann so viel wie 60-70 niedriger sein, je nach dem Fluss der Nachrichten auf dem Sockel. Option Wert typeIn Hochleistungs-Netzwerk-Kopieren von Daten wird als schädlich für die Leistung und so weit wie möglich vermieden. Die Technik, alle Kopien zu vermeiden, wird als "zero-copyquot" bezeichnet. Dieser Artikel zeigt die Auswirkungen der einzelnen Kopie der Daten auf Latenz. Es zeigt zum Beispiel, dass für eine Kopie von 256 MB die Latenzzeit um 0,1 Sekunden erhöht werden kann. Offensichtlich werden die Daten von der Speicherkarte auf die Netzwerkschnittstellenkarte kopiert und umgekehrt, sie werden auf Benutzerraum - / Kernel-Platzgrenzen usw. kopiert Linux Journal gibt detaillierte Erklärung, was los ist unter der Motorhaube des Betriebssystems und was sind die Möglichkeiten, so nah wie die Null-Kopie wie möglich zu bekommen. Doch in diesem Blog werden wir nur eine einzige Instanz des Kopierens der Daten zu diskutieren, nämlich das Kopieren von Benutzerdaten in MQ-Nachrichten. Betrachten Sie das folgende Beispiel. Nun erstellen Sie eine Nachricht Millionen Byte lang und kopieren Sie die Benutzerdaten in sie, bevor Sie senden: Der memcpy Teil sieht verdächtig aus. Wir haben die Daten schon im Puffer, also warum nicht den Puffer anstatt zu kopieren, an die Meldung zu senden, ist MQ in der Lage, so etwas zu machen. Es ist und ist es immer gewesen. Alles, was wir tun müssen, ist, die Deallocation-Funktion für den Puffer zu definieren und an MQ zusammen mit dem Puffer zu übergeben: Sobald die Deallocation-Funktion definiert ist, können wir eine quotzero-copyquot-Nachricht erstellen und ihr die Puffer - und Deallocation-Funktion übergeben: Beachten Sie, dass der Puffer Ist jetzt im Besitz der Nachricht. Es wird freigegeben, sobald die Nachricht gesendet wird. Wir dürfen den Puffer nicht selbst freizugeben. Beachten Sie auch den Hinweisparameter. Es kann verwendet werden, wenn ein komplexerer Zuweisungsmechanismus verwendet wird. Sagen wir, dass wir das Chunk mit einem quotallocatorquot-Objekt zugewiesen haben und wir es über dasselbe Objekt freizugeben haben. In einem solchen Fall können wir den Zeiger auf den Zuweiser als Hinweis auf zmqmsginitdata übergeben und die Deallocation-Funktion wie folgt ändern: Weve hat das Kopieren beseitigt, richtig Nun, nicht ganz. In einigen Fällen können die oben genannten funktionieren. In anderen Fällen ist es unzureichend. Betrachten Sie den Fall, wenn wir zwei große Matrizen haben 8212 jede 100MB lange 8212 die wir übertragen wollen. Leider sind sie nicht angrenzend im Gedächtnis. Jeder wurde unter Verwendung eines separaten malloc-Aufrufs zugewiesen, und daher können wir nicht beschreiben, dass beide einen einzigen Datenzeiger verwenden. Warum nicht senden Sie sie als zwei separate Nachrichten dann Betrachten Sie sagen, REQ-Buchse. Es belastet Nachrichten. Anders ausgedrückt, wenn zwei REP-Buchsen angeschlossen sind, würde das Senden zweier Nachrichten dazu führen, dass die erste Matrix an eine REP-Buchse geschickt wird, während die zweite in die andere REP-Buchse geschoben wird. Das ist nicht das, was wir wollen. Wir wollen, dass die beiden Matrizen eine atomare Übertragungseinheit bilden. Sie sollten nie getrennt werden. Es scheint, dass in diesem Fall brauchen wir etwas Äquivalent zu POSIX Sammelarrays. Für diejenigen, die nicht vertraut mit Berkeley Socket-API, sammeln Array ist ein Array von Daten-Chunks, die an den Netzwerk-Stack mit einem einzigen Anruf gesendet. Aber wäre das für alle möglichen Szenarien Theres noch ein Szenario, wo es nicht helfen. Wenn die beiden Matrizen nicht gleichzeitig existieren. Zuerst wird erstellt, gesandt und deallocated, dann zweite. In einem solchen Fall wäre das Gather-Array nutzlos. Es gibt keinen einzigen Zeitpunkt, wenn wir alle Daten besitzen und somit in der Lage sind, das Gather-Array auszufüllen. Das neue Feature in MQ namens quotmulti-Teil Messagequot löst das Problem. Um es einfach auszudrücken, können Sie mehrere Nachrichten in einer einzigen Nachricht verketten: Es sieht fast genauso aus, als ob Sie zwei separate Nachrichten senden würden, mit Ausnahme der Übergabe der ZMQSNDMORE-Flagge zum ersten senden. Das Flag sagt: "Hold on Es gibt weitere Daten, die diesem Messagequot hinzugefügt werden sollen. Wichtig ist, dass, obwohl alle Teile der Nachricht als eine einzige atomare Übertragungseinheit behandelt werden, die Grenzen zwischen den Nachrichtenteilen strikt beibehalten werden. Mit anderen Worten, wenn Sie eine Nachricht senden, die aus zwei Nachrichtenteilen besteht, die jeweils 100 Byte lang sind, erhalten Sie nie einen einzigen Nachrichtenteil von 200 Bytes lang. Oder zwei Nachrichtenteile, 50 und 150 Bytes lang. Oder sogar vier Nachrichtenteile, jede 50 Bytes lang. Youll erhalten genau, was youve 8212 zwei Nachrichtenteile gesendet, jede 100 Bytes lang in der gleichen Reihenfolge wie sie gesendet wurden. Diese Tatsache ermöglicht die Verwendung von mehrteiligen Nachrichten für das Hinzufügen grobkörniger Struktur zu Ihrer Nachricht. Das Beispiel mit zwei Matrizen veranschaulicht den Punkt. Sie senden die beiden Matrizen als zwei Nachrichtenteile und vermeiden so die Kopie. Gleichzeitig werden die Matrizen sauber getrennt, wobei jeder in seinem eigenen Nachrichtenteil wohnt und man garantiert, dass die Trennung auch auf der Empfangsseite erhalten bleibt. Folglich müssen Sie nicht Matrixgröße in die Mitteilung setzen oder irgendeine Art von quotmatrix delimitersquot erfinden. Ein weiterer interessanter Einsatz von mehrteiligen Meldungen besteht darin, diese mit PUB / SUB-Sockeln zu kombinieren. Das Veröffentlichen / Abonnieren von Nachrichtenmustern ermöglicht das Abonnieren für eine bestimmte Teilmenge von Nachrichten. Subskription ist ein Teil der Daten, die vom Empfänger geliefert werden, sagend, zitieren Sie, senden Sie mir alle Mitteilungen, die mit diesem dataquot beginnen: Offensichtlich muss Absender die entsprechenden Daten am Anfang der Mitteilung setzen, um sie an den spezifischen Teilnehmer zu liefern: Der Teil von Wird die Nachricht, die auf die Abonnements überprüft wird, als topic bezeichnet. In unserem Fall ist das Thema quotBCquot. Wenn das Thema von variabler Länge ist, müssen Sie ein Trennzeichen von dem Rest der Nachricht trennen, sodass das Subskriptionsmechanismus den Anfang der Daten nicht als eine Fortsetzung des Themas betrachtet. Im folgenden Beispiel wird das Pipequot-Symbol als Trennzeichen verwendet: Während dies funktioniert, ist es ein wenig hässlich. Noch wichtiger ist, wenn das Thema Binärdaten sind, theres kein Ersatz-Symbol können wir als das Trennzeichen verwenden. Elegante Lösung ist es, eine zweiteilige Nachricht zu verwenden. Abonnements werden immer nur gegen den ersten Meldungsteil ausgewertet, so dass wir das Thema in den ersten Meldungsteil platzieren können, während der Rest der Daten in den zweiten (oder sogar in mehrere nachfolgende Meldungsteile): Eine letzte Bemerkung. Wenn Sie eine Nachricht erhalten, können Sie wissen, dass jede Nachricht aus zwei Teilen besteht, z. B. quottopicquot und quotvaluequot. Allerdings, in anderen Szenarien können Sie keine Ahnung, wie viele Nachrichtenteile gibt es in der Nachricht. In einem solchen Fall MQ ermöglicht es Ihnen, die Steckdose fragen, ob es mehr Nachricht Teile zu empfangen sind oder nicht. Dies geschieht mit ZMQRCVMORE Socket-Option: Geschrieben: 08 Mai 2010 09:58 Überarbeitet: 01 Aug 2012 10:33 Wenn Sie diese Seite nützlich fanden, bewerten Sie es bitte, damit andere es finden.

No comments:

Post a Comment