2017-06-12 5 views
2

Ich glaube, ich habe einfache Frage, aber ich kann nicht beantworten: Wie kann ich viele Verbraucher auf einmal laufen? Zum Beispiel habe ich 3 VerbraucherSymfony RabbitMQ: Run viele Verbraucher in der Konsole

consumers: 
    rename_image_folder: ... 
    update_customer: ... 
    create_protocol: ... 

und wie kann ich sie auf einmal laufen? Ich muss 3 Konsolenfenster öffnen und sie ausführen? Aber in unserem Projekt haben wir 10 Microservice Api und jeder hat mindestens einen Consumer. Wie kann ich damit arbeiten?

Ich glaube, dass wir einen Weg haben, wie man es macht. Zum Beispiel habe ich verschiedene routing_key, und ich muss verschiedene Methoden (oder Dienste) zu Verarbeitungswarteschlangen schreiben. Vielleicht gibt es einen anderen Weg, es zu verarbeiten.

Es wird sehr gut sein, wenn Sie bitte ein Beispiel anwenden. Vielen Dank!

+0

Der Nachrichtenbus könnte eine gute Wahl für MOA, wenn Sie eine asynchrone Kommunikation erstellen möchten. Hier ist ein Artikel, wie Sie verschiedene PHP-Apps verbinden können https://blog.forma-pro.com/message-bus-to-every-php-application-42a7d3fbb30b –

Antwort

1

Sie benötigen ein Bündel wie this one zu bedienen und installieren Supervisor auf Ihrem Server. Das Bundle übernimmt die Erstellung von Supervisord-Profilen aus Ihren rabbitmq-Einstellungen und hält Ihre verschiedenen Konsumenten automatisch am Leben. Ich habe es funktioniert sehr stabil mit diesem Bündel und php-amqplib/rabbitmq-bundle

+0

Vielen Dank! Ich werde es heute überprüfen! –

1

Andere Verbraucher würde sagen, verschiedene php-Prozess, das bedeutet, dass Sie die Anzahl der Verbraucher erhöhen können mehr php Prozess, die Nachricht der Warteschlange verbrauchen erhöhen.

Ich empfehle Ihnen, ein Tool wie Supervisord zu verwenden, um die Anzahl der PHP-Prozess zu steuern und kümmern sich um den Status des Prozesses.

Als Beispiel könnte man einen einfachen supervisord Prozess mit der Anzahl des PHP-Prozesses (das numprocs Element) konfiguriert:

[supervisord] 
logfile = /tmp/supervisord.log 
logfile_maxbytes = 10MB 
directory = %(here)s 
pidfile = /tmp/supervisord.pid 
[program:todo] 
command = php /var/www/symfony/bin/console rabbitmq:consumer -w sync 
autostart = true 
autorestart = true 
numproc=5 

Hope this Hilfe

+0

Ein Prozess pro Warteschlange ist nicht immer gut. Es hat Nachteile. Wenn Sie 100 Warteschlangen haben, benötigen Sie mindestens 100 Prozesse, um alle zu bedienen. Eine typische Symfony-App benötigt 100 MB Speicher, nur um zu starten, also benötigen Sie 10 GB Speicher –

+0

@MaksimKotlyar sicher, aber ist ein Design-Problem: Sie können nicht von mehreren Warteschlange verbrauchen – Matteo

+0

Eigentlich können Sie aus mehreren Warteschlangen konsumieren, obwohl Sie neu konfigurieren müssen Anwendung, und Sie können es nicht zur Laufzeit konfigurieren. Die Lösung ist nicht so flexibel. Ich mag, wie EnqueueBundle es tut. Es gibt mehr Optionen zum Umgang mit Warteschlangen. –

Verwandte Themen