2016-11-29 2 views
0

Ich benutze RabbitMQ mit Hilfe dieser PHP-Bibliothek https://github.com/jakubkulhan/bunny, jetzt funktioniert mein Code in der folgenden Weise: Jede Warteschlange hat separate Klasse zum Hinzufügen neuer Nachrichten zum Beispiel Warteschlange und separate Warteschlange Worker : SmsQueue und SmsWorker. Ich renne Queue Worker (zum Beispiel SmsWorker) von Cron, die Sache ist, dass ich den Arbeiter nur ausführen möchte, wenn es nicht bereits ausgeführt wird. Ich dachte, dass RabbitMQ eine Möglichkeit hat, um zu sehen, ob es derzeit aktive Benutzer der Warteschlange gibt, aber ich konnte es nicht finden. Was ist die Lösung hier und mache ich es richtig?Nur ein Verbraucher pro RabbitMQ Queue

P.S. Ich habe gerade begonnen, RabbitMQ zu benutzen und weiß nicht viel darüber, es tut mir leid, wenn es eine dumme Frage ist.

Antwort

0

Ich dachte, dass RabbitMQ einen Weg, wenn es zu sehen, hat die derzeit aktive Verbraucher von Warteschlange,

nicht direkt, nein.

Sie können möglicherweise eine Möglichkeit finden, dies in der HTTP-API des Verwaltungstools abzufragen, aber ich würde das nicht tun. Die Zeitspanne zwischen dem Ausführen der Abfrage und dem Starten des Codes kann die Erstellung von mehr als einer Anwendungsinstanz ermöglichen.

Stattdessen würde ich zwei Optionen aussehen:

1) beantragen exklusiven Zugriff auf die Warteschlange, für die Verbraucher (nicht sicher über Ihre Bibliothek, aber es ist ein Teil der AMQP-Spezifikation: https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.consume.exclusive)

2) Verwenden Sie einen Mutex in Ihrer Anwendung, um sicherzustellen, dass Ihre Anwendung nur einmal ausgeführt wird

Alternativ richten Sie Ihre Consumer App so ein, dass Sie immer nur eine Instanz davon haben und sie läuft immer. Wenn Sie neue Instanzen nicht dynamisch starten, gibt es nie mehr als eine Instanz.

Verwandte Themen