pablicio/mirabel-rabbitmq

基于php-amqplib库,简化PHP中RabbitMQ使用的库,通过抽象其使用来简化使用过程。

安装: 179

依赖: 0

建议者: 0

安全: 0

星星: 8

关注者: 1

分支: 0

开放问题: 0

类型:

v1.0.5 2023-04-18 01:23 UTC

This package is auto-updated.

Last update: 2024-09-17 13:24:38 UTC


README

WhatsApp Image 2023-04-03 at 15 09 14

mirabel-rabbitmq

基于php-amqplib库,简化PHP中RabbitMQ使用的库,通过抽象其使用来简化使用过程。

安装

composer require pablicio/mirabel-rabbitmq

如何在Laravel中配置

运行发布者,它将在config/mirabel_rabbitmq.php中创建文件

php artisan vendor:publish --provider="Pablicio\MirabelRabbitmq\MirabelRabbitmqServiceProvider"

然后只需根据您的环境进行配置。

<?php

return [
  'connections' => [
    'rabbitmq-php' => [
      'host' => env('MB_RABBITMQ_HOST', 'localhost'),
      'port' => env('MB_RABBITMQ_PORT', 5672),
      'user' => env('MB_RABBITMQ_USER', 'guest'),
      'password' => env('MB_RABBITMQ_PASSWORD', 'guest'),
      'exchange' => env('MB_RABBITMQ_EXCHANGE', 'my-exchange'),
      'exchange_type' => env('MB_RABBITMQ_EXCHANGE_TYPE', 'topic'),
      'exchange_passive' => env('MB_RABBITMQ_EXCHANGE_PASSIVE', false),
      'exchange_durable' => env('MB_RABBITMQ_EXCHANGE_DURABLE', true),
      'exchange_auto_delete' => env('MB_RABBITMQ_EXCHANGE_DELETE', false),
      'exchange_nowait' => env('MB_RABBITMQ_EXCHANGE_NOWAIT', false),
      'exchange_arguments' => env('MB_RABBITMQ_EXCHANGE_ARGUMENTS', []),
      'exchange_ticket' => env('MB_RABBITMQ_EXCHANGE_TICKET', null)
    ],
  ]
];

使用示例

创建发布者类

<?php

namespace App\Events;

use Pablicio\MirabelRabbitmq\RabbitMQEventsConnection;

class OrderReceivedEvent
{
  use RabbitMQEventsConnection;

  const ROUTING_KEY = 'my-service.request-orders.received';

  function __construct($payload)
  {
    $this->routingKey = self::ROUTING_KEY;
    $this->payload = $payload;
  }
}

如何调用发布者

(new App\Events\OrderReceivedEvent('ReceivedPayload'))->publish()

创建监听器类

<?php

namespace App\Workers;

use Pablicio\MirabelRabbitmq\RabbitMQWorkersConnection;

class OrderReceivedWorker
{
  use RabbitMQWorkersConnection;

  const QUEUE = 'my-service.request-test',
    routing_keys = [
      'my-service.request-orders.received'
    ],
    options = [
      'exchange_type' => 'topic'
    ],
    retry_options = [
      'x-message-ttl' => 1000,
      'max-attempts' => 8
    ];

  public function work($msg)
  {
    try {
      print_r($msg->body);

      return $this->ack($msg);
    } catch (\Exception $e) {

      return $this->nack($msg);
    }
  }
}

如何调用订阅者

  (new App\Workers\OrderReceivedWorker)->subscribe();

函数

options 参数

必须声明options数组。如果为空,我们将假设.env的设置

retry_options 参数

如果您传递空的options数组,我们将假设.env的设置;如果您不想使用重试,请删除retry_options数组。

免责声明:我们不对其使用负责

这个库仍在开发中,所以它不能在许多场景下正常工作,它是用于测试和学习的,如果您使用它,请自行承担风险。我很快会回来发展,但为此我需要社区的帮助,如果您想为PR感到像所有者一样,我的联系邮箱是 pabliciotjg@gmail.com

待办事项

  • 在publish()方法中添加可观察性属性作为参数,如traker_id等更多元数据。
  • 成为对其他框架的无感知
  • 添加单元测试
  • 改进文档