Rumah >pembangunan bahagian belakang >tutorial php >Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan komunikasi mesej yang diedarkan dan menolak

Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan komunikasi mesej yang diedarkan dan menolak

WBOY
WBOYasal
2023-09-24 18:01:421077semak imbas

Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan komunikasi mesej yang diedarkan dan menolak

Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan komunikasi mesej teragih dan menolak

Dengan perkembangan Internet, seni bina teragih telah menjadi trend penting dalam pembangunan perisian moden. Dalam seni bina teragih, perkhidmatan mikro ialah corak seni bina popular yang membahagikan aplikasi besar kepada berbilang unit perkhidmatan kecil dan autonomi. Kerjasama dan interaksi dicapai melalui komunikasi mesej antara perkhidmatan mikro ini.

Artikel ini akan memperkenalkan cara menggunakan perkhidmatan mikro PHP untuk melaksanakan komunikasi dan tolak mesej yang diedarkan, serta memberikan contoh kod khusus.

  1. Mulakan projek

Mula-mula, buat projek PHP baharu. Katakan projek kami dipanggil "perkhidmatan mesej". Jalankan arahan berikut dalam baris arahan:

mkdir message-service
cd message-service
composer init

Isi maklumat projek mengikut arahan baris arahan, dan tambah kandungan berikut pada composer.json yang dihasilkan: 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

Kemudian laksanakan yang berikut arahan untuk memasang perpustakaan dependencies yang diperlukan:

rrreee

    Konfigurasikan perisian tengah mesej🎜🎜🎜Dalam sistem yang diedarkan, perisian tengah mesej memainkan peranan penting, dan ia bertanggungjawab untuk mengendalikan pemesejan dan komunikasi antara perkhidmatan mikro. Kita boleh memilih perisian tengah mesej yang berbeza, seperti RabbitMQ, Kafka, dsb. Di sini kami mengambil RabbitMQ sebagai contoh. 🎜🎜Buat direktori bernama config dalam direktori root message-service dan buat fail rabbitmq.php dalam direktori ini. Dalam fail ini, tambahkan kod berikut: 🎜rrreee
      🎜Buat pengeluar mesej🎜🎜🎜Buat fail bernama Producer.php dengan kod berikut: 🎜rrreee🎜Buat pengguna mesej🎜🎜🎜Buat fail bernama Consumer.php dengan kod berikut: 🎜rrreee
        🎜Gunakan pengeluar mesej Dan pengguna 🎜🎜🎜Dalam fail index.php, kami boleh menggunakan pengeluar dan pengguna untuk menghantar dan menerima mesej. Kodnya adalah seperti berikut: 🎜rrreee🎜Jalankan skrip index.php dan anda akan melihat mesej yang digunakan untuk ujian dihantar dan diterima. 🎜🎜Setakat ini, kami telah melaksanakan komunikasi mesej yang diedarkan perkhidmatan mikro dan menolak berdasarkan PHP. Anda boleh melanjutkan dan menyesuaikan seni bina ini untuk melaksanakan fungsi yang lebih kompleks mengikut keperluan perniagaan anda. 🎜

Atas ialah kandungan terperinci Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan komunikasi mesej yang diedarkan dan menolak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn