a-mazalov/kali-message-broker

微服务间的消息传递

v3.3.2 2024-09-23 12:09 UTC

README

Latest Stable Version

使用 rabbitmq 代理进行服务间消息传递

在 dev container VScode 中启动

  1. 打开项目
  2. F1 -> Dev Containers: 重新构建并在容器中重新打开

启动测试

composer test

向 RabbitMQ 发布消息

  1. 需要指定 RabbitMQ AMQP 连接

其中 AMQP_EXCHANGE_NAME 是公共交换机的名称

AMQP_HOST=rabbitmq
AMQP_PORT=5672
AMQP_USER=root
AMQP_PASSWORD=root
AMQP_VHOST=/
AMQP_QUEUE_NAME=
AMQP_EXCHANGE_NAME=incoming_web
  1. 通过通知发送

实现一个具有 RabbitmqChannel 通道的通知类,或者使用现有的 RabbitmqMessageNotification

    use Kali\MessageBroker\Messages\Data\Test;
    use Kali\MessageBroker\Notifications\RabbitmqMessageNotification;

    $testData = new Test(email: "djoni@google.com", message: "Hello World!");
    $routing_key = "access" // очередь сервиса в который необходимо отправить сообщение. Роутинг настраивается через Exchange в админке RabbitMQ 

    Notification::route("rabbitmq", $routing_key)->notify(
        new RabbitmqMessageNotification("TestJob", $testData->toResource())
    );

从 RabbitMQ 获取消息

要从 Rabbitmq 获取消息,需要连接和队列处理程序 php artisan rabbitmq:consume

  1. 需要安装额外的包 laravel-queue-rabbitmq

  2. 需要指定 rabbitmq 连接和监听队列 RABBITMQ_QUEUE

RABBITMQ_HOST=rabbitmq
RABBITMQ_PORT=5672
RABBITMQ_USER=root
RABBITMQ_PASSWORD=root
RABBITMQ_VHOST=/
RABBITMQ_QUEUE=access_queue
  1. 将配置添加到 config/queue.php(包文档中的当前配置)
        'rabbitmq_consumer' => [
            'driver' => 'rabbitmq',
            'queue' => env('RABBITMQ_QUEUE', 'default'),
            'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,

            'hosts' => [
                [
                    'host' => env('RABBITMQ_HOST', '127.0.0.1'),
                    'port' => env('RABBITMQ_PORT', 5672),
                    'user' => env('RABBITMQ_USER', 'guest'),
                    'password' => env('RABBITMQ_PASSWORD', 'guest'),
                    'vhost' => env('RABBITMQ_VHOST', '/'),
                ],
            ],

            'options' => [
                'ssl_options' => [
                    'cafile' => env('RABBITMQ_SSL_CAFILE', null),
                    'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
                    'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
                    'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
                    'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
                ],
                'queue' => [
                    'job' => \Kali\MessageBroker\Worker\ConsumeRabbitMQ::class,
                ],
            ],

            /*
             * Set to "horizon" if you wish to use Laravel Horizon.
             */
            'worker' => env('RABBITMQ_WORKER', 'default'),
        ],
  1. 实现消息处理程序类并在配置中指定它
    'queue' => [
        'job' => \Kali\MessageBroker\Worker\ConsumeRabbitMQ::class,
    ],
  1. 执行 php artisan vendor:publish 并选择 Kali\MessageBroker\Providers\MsgServiceProvider

  2. 填写 config/message.php 以匹配输入消息的名称并执行所需任务

  3. 启动处理程序 php artisan rabbitmq:consume rabbitmq_consumer

rabbitmq_consumer - config/queue.php 中的连接名称