Ich versuche eine Pub/Sub-Architektur zu erstellen, in der mehrere Publisher und mehrere Abonnenten im selben Bus existieren. Nach dem, was ich im Internet gelesen habe, sollte immer nur ein Socket bind() aufrufen, und alle anderen (egal ob Pub oder Sub) sollten connect() aufrufen.Wie führe ich mehrere Verlage mit einem einzigen Endpunkt in ZeroMQ?
Das Problem ist, mit diesem Ansatz finde ich, dass nur der Herausgeber, der tatsächlich Bind() auf dem Socket überhaupt veröffentlicht Nachrichten veröffentlicht. Alle meine Publisher, die connect() aufrufen, scheinen im Hintergrund zu versagen und veröffentlichen keine Nachrichten auf dem Bus. Ich habe bestätigt, dass dies kein Problem mit dem Abonnentenschlüssel ist, da ich eine einfache "Sniffer" -App geschrieben habe, die alle Nachrichten auf dem Bus abonniert, und es zeigt nur den Herausgeber an, der bind() aufgerufen hat.
Wenn ich mehrere Bindungen mit dem Herausgeber versuche, tritt das "erwartete" zmq-Verhalten des unbemerkten Stehlens des Busses mit ipc auf, und ein Port in Verwendung wird mit tcp geworfen.
Ich habe dieses Verhalten mit IPC und TCP-Endpunkten verifiziert, aber letztendlich wird das gesamte System epgm verwenden. Ich nehme an (obwohl es natürlich falsch ist), dass ich in dieser Situation keinen Broker brauche, da keine dynamische Erkennung stattfindet (Endpunkte sind bekannt, ob ipc, tcp oder epgm Multicast).
Gibt es etwas, das ich vermisse, vielleicht eine Socket-Einstellung, die dazu führen würde, dass die verbindenden Publisher ihre Daten nicht wirklich senden? Laut der Literatur, die ich im Internet gesehen habe, mache ich Dinge "richtig", aber es funktioniert immer noch nicht.
Als Referenz mein Verleger Klasse hat die folgenden Methoden für den Endpunkt der Einrichtung:
ZmqPublisher::ZmqPublisher()
: m_zmqContext(1), m_zmqSocket(m_zmqContext, ZMQ_PUB)
{}
void ZmqPublisher::bindEndpoint(std::string ep)
{
m_zmqSocket.bind(ep.c_str());
}
void ZmqPublisher::connect(std::string ep)
{
m_zmqSocket.connect(ep.c_str());
}
So letztlich meine Frage ist: Was ist der richtige Weg ist, mehrere Publisher auf dem gleichen Endpunkt zu handhaben, und Warum sehe ich keine Nachrichten von mehr als einem Publisher?
Ihre Frage ist nicht klar; eine Überarbeitung in Erwägung ziehen. – raffian