Ich verliere Nachrichten nur, wenn ich Themen abonnieren.ZeroMQ Pub/Sub löscht Nachrichten nur beim Abonnieren von Themen
Hier ist das Szenario:
Der Abonnent abonniert ein bestimmtes Thema und ruft dann den Herausgeber in einem anderen Thread (mit dem gleichen Kontext und dem gleichen "abonnierten Thema").
Der Verlag erhält das "abonnierte Thema" und veröffentlicht es.
Wenn ich zwei Prozeduren ausführen (dh 2 Abonnententhreads und 2 Publisher-Threads), erhalte ich nur eine Nachricht auf einem der Threads (nach dem Zufallsprinzip).
Ich habe keine Ahnung, warum ich die zweite Nachricht verliere.
Verlag thread:
void *publisher = zmq_socket(ptStruct->zContext, ZMQ_PUB);
assert(0 == zmq_bind(publisher, "inproc://#1"));
printf("Publishes to %d \n", ptStruct->iID);
assert(-1 != zmq_send(publisher, &(ptStruct->iID), sizeof(ptStruct->iID), 0));
zmq_close(publisher);
Subscriber thread:
void *subscriber = zmq_socket(ptStruct->zContext, ZMQ_SUB);
assert(0 == zmq_connect(subscriber, "inproc://#1"));
assert(0 == zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, &(ptStruct->iID), sizeof(ptStruct->iID)));
printf("Subscribed to %d \n", ptStruct->iID);
/* Now run the publisher in a different thread */
OSTHREAD_CreateThread(&ptThread, publishThread, ptStruct, NULL);
assert(-1 != zmq_recv(subscriber, acRec, 255, 0));
printf("Got %d \n", acRec[0]);
zmq_close(subscriber);
Ich betreibe den Teilnehmer Thread zweimal, und dies ist die Ausgabe:
Subscribed to 1
Subscribed to 2
Publishes to 1
Got 1
Publishes to 2
Interessant .. Obwohl es funktioniert, wenn ich keine Filter im Abonnement verwendet habe. Denkst du, dass es einen besseren Weg gibt als Pub/Sub? (weil ich etwas wie pub/sub aber viele zu viele brauche) – Drxxd
Sie geben nicht genug Details, um wirklich zu verstehen, was der beste Weg ist, Ihre Kommunikation zu entwerfen. Sie können viele zu viele mit pub/sub tun, Sie müssen nur jedes Pub an seinen eigenen Endpunkt binden und dann jeden Teilnehmer mit jedem Pub verbinden. Aber warum brauchst du mehr als eine Pub-Steckdose? Ohne zu verstehen, was Sie vorhaben, kann ich nicht vorschlagen, was in Ihrem Fall am besten ist. – Jason