2017-06-11 2 views
0

Ich fragte eine Frage in: Microservice Architecture dependency welches Muster zu verwenden, wenn Sie eine Clustered Microservice Architektur verwenden.Nats welches Muster zu verwenden

erhielt ich diesen Punkt zu Punkt beantworten sollte aber funktionieren, wenn das Lesen: https://nats.io/documentation/concepts/nats-req-rep/ Es ist wie alle Ereignis BEKOMMT Abonnenten fühlt (und wegen dass es Griffe), aber es wird nur ein Teilnehmer antwortet, dass. Dies funktioniert nicht, wenn ein Order-Event ausgelöst wird, das ein Update-Inventory-Event auslöst, das von Inventory Microservices abonniert wird (wie im Beispiel in Link), dh es wird nicht in einem Clustered-Env unterstützt, da das Inventar genauso oft aktualisiert wird die Anzahl der Microservice-Instanzen.

Wie kann ich dieses Szenario mit Nats lösen?

Vielen Dank im Voraus!

Antwort

3

NATS.io unterstützt diese Funktion mit Warteschlangengruppen:

Alle Abonnements mit dem gleichen Queue-Namen eine Warteschlangengruppe bilden. Jede Nachricht wird an nur einen Teilnehmer pro Warteschlangengruppe mit Warteschlangensemantik übermittelt. Sie können so viele Warteschlangengruppen haben, wie Sie möchten. Normale Abonnenten werden weiterhin wie erwartet arbeiten.

Ihre Dienste anschließen Warteschlangengruppe verwendet (Probe ist node.js):

https://github.com/nats-io/node-nats#queue-groups

nats.subscribe('foo', {'queue':'job.workers'}, function() { 
    received += 1; 
}); 

dann würde der Client verwenden, um die Bibliothek bereitgestellt Anforderungsmethoden:

https://github.com/nats-io/node-nats#basic-usage

// Request for single response with timeout. 
nats.requestOne('help', null, {}, 1000, function(response) { 
    // `NATS` is the library. 
    if(response.code && response.code === NATS.REQ_TIMEOUT) { 
    console.log('Request for help timed out.'); 
    return; 
    } 
    console.log('Got a response for help: ' + response); 
}); 
Verwandte Themen