Maison  >  Article  >  développement back-end  >  Comment utiliser les microservices PHP pour implémenter la communication par messages distribués et le push

Comment utiliser les microservices PHP pour implémenter la communication par messages distribués et le push

WBOY
WBOYoriginal
2023-09-24 18:01:421047parcourir

Comment utiliser les microservices PHP pour implémenter la communication par messages distribués et le push

Comment utiliser les microservices PHP pour implémenter la communication et le push de messages distribués

Avec le développement d'Internet, l'architecture distribuée est devenue une tendance importante dans le développement de logiciels modernes. Dans l'architecture distribuée, les microservices sont un modèle architectural populaire qui divise une grande application en plusieurs petites unités de service autonomes. La collaboration et l'interaction sont réalisées grâce à la communication de messages entre ces microservices.

Cet article expliquera comment utiliser les microservices PHP pour implémenter la communication par messages distribués et le push, et fournira des exemples de code spécifiques.

  1. Initialisez le projet

Tout d'abord, créez un nouveau projet PHP. Disons que notre projet s'appelle "message-service". Exécutez la commande suivante dans la ligne de commande :

mkdir message-service
cd message-service
composer init

Remplissez les informations du projet en fonction des invites de la ligne de commande et ajoutez le contenu suivant au composer.json généré : composer.json中添加以下内容:

{
    "require": {
        "enqueue/enqueue": "^0.9.18",
        "enqueue/elasticsearch": "^0.9.7",
        "enqueue/mongodb": "^0.9.16",
        "enqueue/redis": "^0.9.19",
        "enqueue/stomp": "^0.9.16",
        "enqueue/zmq": "^0.9.13",
        "enqueue/gearman": "^0.9.11"
    },
    "autoload": {
        "psr-4": {
            "MessageService\": "src/"
        }
    }
}

然后执行以下命令安装所需的依赖库:

composer install
  1. 配置消息中间件

在分布式系统中,消息中间件扮演着关键的角色,它负责处理微服务之间的消息传递和通信。我们可以选择不同的消息中间件,如RabbitMQ、Kafka等。这里我们以RabbitMQ为例。

message-service根目录下创建一个名为config的目录,并在该目录下创建rabbitmq.php文件。在该文件中,添加以下代码:

<?php

return [
    'connections' => [
        'default' => [
            'host' => 'localhost',
            'port' => 5672,
            'user' => 'guest',
            'pass' => 'guest',
            'vhost' => '/',
        ],
    ],
];
  1. 创建消息生产者

创建一个名为Producer.php的文件,代码如下:

<?php

namespace MessageService;

use EnqueueAmqpLibAmqpConnectionFactory;
use EnqueueMessagesValidatorTrait;
use InteropAmqpAmqpContext;
use InteropAmqpAmqpMessage;

class Producer
{
    use MessagesValidatorTrait;

    private $context;

    public function __construct()
    {
        $config = include 'config/rabbitmq.php';

        $connectionFactory = new AmqpConnectionFactory($config['connections']['default']);
        $this->context = $connectionFactory->createContext();
    }

    public function publish(string $message): void
    {
        $this->assertMessageValid($message);

        $message = $this->context->createMessage($message);
        $this->context->createProducer()->send($message);
        echo 'Message published: ' . $message->getBody() . PHP_EOL;
    }
}
  1. 创建消息消费者

创建一个名为Consumer.php的文件,代码如下:

<?php

namespace MessageService;

use EnqueueAmqpLibAmqpConnectionFactory;
use InteropAmqpAmqpContext;
use InteropAmqpAmqpMessage;

class Consumer
{
    private $context;

    public function __construct()
    {
        $config = include 'config/rabbitmq.php';

        $connectionFactory = new AmqpConnectionFactory($config['connections']['default']);
        $this->context = $connectionFactory->createContext();
    }

    public function consume(): void
    {
        $this->context->declareQueue($this->context->createQueue('message_queue'));

        $consumer = $this->context->createConsumer($this->context->createQueue('message_queue'));

        while (true) {
            if ($message = $consumer->receive(3000)) {
                echo 'Received message: ' . $message->getBody() . PHP_EOL;
                $consumer->acknowledge($message);
            }
        }
    }
}
  1. 使用消息生产者和消费者

index.php文件中,我们可以使用生产者和消费者来发送和接收消息。代码如下:

<?php

require __DIR__ . '/vendor/autoload.php';

use MessageServiceProducer;
use MessageServiceConsumer;

$producer = new Producer();
$producer->publish('Hello, World!');

$consumer = new Consumer();
$consumer->consume();

运行index.phprrreee

Ensuite, exécutez ce qui suit commande pour installer les dépendances requises Bibliothèque :

rrreee

    Configurer le middleware de message🎜🎜🎜Dans un système distribué, le middleware de message joue un rôle clé et il est responsable de la gestion de la messagerie et de la communication entre les microservices. Nous pouvons choisir différents middlewares de messages, tels que RabbitMQ, Kafka, etc. Ici, nous prenons RabbitMQ comme exemple. 🎜🎜Créez un répertoire nommé config dans le répertoire racine de message-service, et créez le fichier rabbitmq.php dans ce répertoire. Dans ce fichier, ajoutez le code suivant : 🎜rrreee
      🎜Créez un producteur de message🎜🎜🎜Créez un fichier appelé Producer.php avec le code suivant : 🎜rrreee🎜Créer un message consommateur🎜🎜🎜Créer un fichier nommé Consumer.php avec le code suivant : 🎜rrreee
        🎜Utiliser un message producteur Et consommateurs 🎜🎜🎜Dans le fichier index.php, nous pouvons utiliser des producteurs et des consommateurs pour envoyer et recevoir des messages. Le code est le suivant : 🎜rrreee🎜Exécutez le script index.php et vous verrez les messages utilisés pour les tests envoyés et reçus. 🎜🎜Jusqu'à présent, nous avons implémenté une communication par messages distribués par microservices et un push basé sur PHP. Vous pouvez étendre et personnaliser cette architecture pour réaliser des fonctions plus complexes en fonction des besoins de votre entreprise. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn