Mit der kontinuierlichen Ausweitung des Internetgeschäfts nimmt auch die Komplexität des Systems zu. Um eine höhere Verfügbarkeit, Wartbarkeit und Skalierbarkeit zu erzielen, beginnen immer mehr Unternehmen, Microservice -Architekturen zu übernehmen. Unter dieser Architektur werden Nachrichtenwarteschlangen zu einem wichtigen Mechanismus für eine asynchrone Kommunikation zwischen Diensten. In diesem Artikel wird eingehend untersucht, wie die PHP-Microservice-Architektur verwendet wird, um verteilte Nachrichtenwarteschlangen und Kommunikationsmethoden zu implementieren, und detaillierte Erklärungen in Kombination mit Rabbitmq, HTTP und RPC abgeben.
Microservices sind ein Architekturmodell, das monolithische Anwendungen in eine Gruppe kleiner Dienste aufteilt. Jeder Service basiert auf bestimmten Geschäftsfunktionen und verfügt über eine unabhängige Datenbank, einen Bereitstellungs- und Wartungsprozess. Es werden leichte Kommunikationsmechanismen zwischen Diensten wie HTTP-, RPC- oder Nachrichtenwarteschlangen verwendet, um zu interagieren. Diese Architektur verbessert die Flexibilität der Systeme, die Fehlerisolationsfunktionen und die allgemeine Reaktionsgeschwindigkeit.
In einer verteilten Umgebung werden Nachrichtenwarteschlangen verwendet, um Anforderungen asynchron zu verarbeiten, wodurch der Systemdurchsatz und die Stabilität verbessert werden. RabbitMQ ist derzeit weit verbreitete Messaging Messaging Middleware, unterstützt mehrere Protokolle und Sprachen und eignet sich für hohe Parallelitätsszenarien.
Zunächst müssen Sie Rabbitmq installieren und Installationsanweisungen auf seiner offiziellen Website basierend auf dem Betriebssystem erhalten. Nach Abschluss der Installation kann das Basishersteller und das Verbrauchermodell über den folgenden PHP -Code implementiert werden.
required_once __dir __. '/vendor/autoload.php'; Verwenden Sie PHPAMQPLIB \ Connection \ amqpstreamConnection; Verwenden Sie PHPAMQPLIB \ Message \ amqpMessage; // Produzent $ connection = new amqpstreamConnection ('localhost', 5672, 'Gast', 'Gast'); $ Channel = $ Connection-> Channel (); $ Channel-> queue_declare ('Hallo', falsch, falsch, falsch, falsch); $ msg = new amqpMessage ('Hallo Welt!'); $ Channel-> Basic_publish ($ msg, '', 'Hallo'); echo "[x] gesendet 'Hallo Welt!' \ n"; $ kanal-> close (); $ connection-> close ();
// Consumer $ connection = new amqpstreamConnection ('Localhost', 5672, 'Gast', 'Gast'); $ Channel = $ Connection-> Channel (); $ Channel-> queue_declare ('Hallo', falsch, falsch, falsch, falsch); echo "[*] auf Nachrichten warten. Zum Beenden drücken Sie Strg+c \ n"; $ callback = function ($ msg) { echo '[x] empfangen', $ msg-> Körper "\ n"; }; $ Channel-> Basic_consume ('Hallo', '', falsch, wahr, falsch, falsch, $ callback); while ($ kanal-> is_consuming ()) { $ kanal-> wait (); }
Führen Sie die folgenden Befehle im Terminal aus:
PHP Produzent.php PHP Consumer.php
Nach dem Laufen sendet der Produzent die Nachricht an die Warteschlange, und der Verbraucher hört die Nachricht zu und verarbeitet. Dieser Mechanismus unterstützt die gleichzeitige Verarbeitung von mehreren Konsumenten und verbessert die Systemleistung.
Die Kommunikation zwischen Microservices ist eine wichtige Verbindung im Systembetrieb. Im Folgenden sind drei Mainstream -Kommunikationsmethoden aufgeführt.
HTTP ist das häufigste Service -Kommunikationsprotokoll, das für staatenlose Anfragen geeignet ist. Der häufig verwendete HTTP -Client in PHP ist gütig.
erfordern 'Anbieter/autoload.php'; Verwenden Sie GuzzleHttp \ Client; $ client = new Client (); $ response = $ client-> request ('get', 'https://example.com'); echo $ response-> getBody ();
Mit RPC (Remote Procedure Call) können Remote -Dienste zwischen Microservices wie lokalen Funktionen aufgerufen werden. Zu den Bibliotheken, die RPC in PHP unterstützen, gehören GRPC und Sparsamkeit.
Required_once 'Anbieter/autoload.php'; Verwenden Sie HelloWorld \ Hellorequest; Verwenden Sie HelloWorld \ GreeterClient; $ client = new Begrüßung ('localhost: 50051', [ 'Anmeldeinformationen' => grpc \ Channelcredentials :: CreateIneScure (), ]); $ request = new Hellorequest (); $ request-> setName ('welt'); $ response = $ client-> sayhello ($ request); echo $ response-> getMessage ();
Der vorherige Artikel zeigt die Verwendung von Rabbitmq zur Implementierung der asynchrone Kommunikation zwischen Diensten. Diese Methode hat die Vorteile einer starken Entkopplung, einer hohen Verwerfungstoleranz und einer guten Skalierbarkeit. Es eignet sich für Szenarien wie Task -Warteschlange, Protokollierung und Bestellverarbeitung.
Der Aufbau einer Microservice-Architektur durch PHP und die Integration verteilter Nachrichtenwarteschlangen und Kommunikationsmechanismen ist eine wichtige Möglichkeit, moderne Hochleistungssysteme aufzubauen. Rabbitmq implementiert locker gekoppelte Kommunikation zwischen Diensten, HTTP ist für reguläre Serviceanrufe geeignet und RPC ist für Interaktionen mit niedriger Latenz und hoher Frequenz geeignet. Die Kombination dieser Technologien kann die Robustheit und Reaktionsfähigkeit des Systems erheblich verbessern.