2016-04-06 9 views
0

Wir schreiben Mail-Sync-System, und wir verwenden RabbitMQ dafür. Jeder Produzent schiebt E-Mail-IDs, dann erhält der Konsument IDs und fügt E-Mails in db ein. In der Situation, wenn wir 100 Verbraucher (zum Beispiel) haben und die Produzenten die Ids zu schnell erzeugen werden, wird jeder Verbraucher die Ids bekommen und api verwenden, um die Post zu bekommen, so wird die Ausnahme über die Grenze der konkurrierenden Anfrage an die API sein.Wie gruppiere ich Konsumenten in RabbitMQ?

? Wir beschränken den Verbraucher für jeden Hersteller (zum Beispiel, wenn max 3 Verbraucher erhalten werden IDs von einem Hersteller, dann die nächsten 3 erhalten von anderen, und so weiter)?

Antwort

0

Сan begrenzen wir Verbraucher für jeden Hersteller (zum Beispiel, wenn max 3 Verbraucher ids eines Herstellers erhalten werden, dann wird als nächstes 3 von anderen erhalten, und so weiter)?

Sie können dies tun, indem Sie einfaches Routing verwenden.

ProducerA sendet Nachrichten mit Routing-Schlüssel routeA und Consumer1, Consumer2 und consumer3 abonniert werden mit Routing-Schlüssel routeA auszutauschen.
ProducerB sendet Nachrichten mit Routing-Schlüssel Weg b und consumer4, consumer5 und consumer6 abonniert werden mit Routing-Schlüssel Weg b auszutauschen. .. und so weiter
Sie könnten auch topic exchange verwenden.

Es scheint mir jedoch, dass dies möglicherweise nicht die Lösung für das Problem der Ausnahme zu begrenzen gleichzeitige Anfragen an die API ist. Sie haben nicht angegeben, welche API, so kann ich davon ausgehen, dass diese Nummer konfigurierbar ist und Sie können es erhöhen, oder einfach der gleichzeitige Zugriff ist nicht erlaubt (was schwer vorstellbar ist, da Sie wissen, ist nicht die 70er), in denen Fall die ganze Idee der Parallelität bröckelt und fällt ...