2017-07-04 4 views
0

Ich habe mit NATS-Messaging mit dem C# -Client gespielt. Ich erstelle eine Nachricht Verlag, der synchrone Anforderungen sendet:NATS creating doppelte Posteingänge für die Antwort

IConnection connection = new ConnectionFactory().CreateConnection(); 
connection.SubscribeAsync(
    "subject", 
    "queue", 
    (sender, args) => 
    { 
     connection.Publish(args.Message.Reply, new byte[] { 0x00 }); 
    }); 

Alles schön und gut:

IConnection connection = new ConnectionFactory().CreateConnection(); 
Msg rsp = connection.Request("subject", Encoding.ASCII.GetBytes("some text")); 

ich mehrere Teilnehmer mit einer Warteschlangengruppe erstellen. Ich kann mehrere Nachrichten senden, jeder geht an einen und nur einen Teilnehmer, Antworten werden gesendet.

Wenn ich mehrere Warteschlangengruppen verwenden, gehen die Dinge jedoch schief. Angenommen, ich erstelle 20 Publisher mit den Themen "S1", "S2", "S3", ... Für jeden Publisher erstelle ich 5 Abonnenten, also haben die Abonnenten des ersten Publishers den Betreff "S1" und einen Warteschlangennamen von "Q1" & c.

Wenn ich eine Test-App starte, die mit den 20 Publishern läuft, die jeweils in einem eigenen Thread laufen, funktionieren die Dinge schnell. Publisher bleiben hängen, während sie auf synchrone Antworten warten.

Ich habe einige Ablaufverfolgung hinzugefügt und es scheint, dass das Antwort-Token dupliziert wird. So zum Beispiel zwei verschiedene Teilnehmer erhalten Nachrichten, die die gleiche Posteingang für Antworten spezifizieren:

Subject=S3;Reply=_INBOX.C403F3CD707D0EA6F4B1167CE0;Payload=<some text>} 
Subject=S4;Reply=_INBOX.C403F3CD707D0EA6F4B1167CE0;Payload=<some text>} 

ich die Antwort bin zu raten, nur an einen Verlag gehen, so der andere verloren geht.

Antwort

1

Vielen Dank für die Erhöhung dieser; Das Antwortobjekt, das dupliziert wurde, war ein Fehler. Ein Mitarbeiter hat kürzlich eine fix für dieses Problem hinzugefügt (stammend davon, wie RandomEnvironment.TickCount als Seed verwendet).

Das Update ist derzeit in Master-Zweig; Ich werde diese Antwort aktualisieren, wenn eine neue Version geschnitten wird.