kontoulis/rabbitmq-laravel

RabbitMQ 代理用于 Laravel

2.1.10 2018-01-03 10:06 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:58:26 UTC


README

Latest Stable Version Latest Unstable Version License

安装

通过 Composer

$ composer require kontoulis/rabbitmq-laravel

将服务提供者添加到 config/app.php

Kontoulis\RabbitMQLaravel\RabbitMQLaravelServiceProvider::class,

将 RabbitMQ 门面添加到 config/app.php

'RabbitMQ' => Kontoulis\RabbitMQLaravel\Facades\RabbitMQ::class,

发布配置文件,并在需要时在 config/rabbitmq-laravel.php 中编辑它

$ php artisan vendor:publish

使用方法

  • 路由键/队列名称

默认路由键可以在配置文件中设置,或者使用 env("APP_NAME")."_queue"。此外,大多数方法都接受参数 $routingKey,可以覆盖默认值。

RabbitMQ::setRoutingKey("myRoutingKey/queueName");
  • 交换

如果您没有设置交换,将使用默认的 '' 交换。如果您设置了一个,请确保在 RabbitMQ 系统中设置了绑定。如果您不熟悉交换,可能不需要设置。

RabbitMQ::setExchange("myExchange")'

您可以使用 RabbitMQ 门面执行如https://github.com/php-amqplib/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php中所示的操作。基本上,RabbitMQ 门面使用 Broker 类,该类是 AMQPChannel 的扩展。

  • 发布
// Single message
 
$msg = [
    "key1" => "value1", 
    "key2" => "value2"
    ];         
RabbitMQ::publishMesssage($msg);

// OR
RabbitMQ::publishMessage($msg, "myRoutingKey");

// Batch publishing

$messages = [
    [ "messsage_1_key1" => "value1", 
      "messsage_1_key2" => "value2"
    ],
    [
    "messsage_2_key1" => "value1", 
    "messsage_2_key2" => "value2"
    ]
];
RabbitMQ::publishBatch($messages);
// OR
RabbitMQ::publishBatch($messages, "myRoutingKey");
  • 消费队列

为了消费队列,您可以使用 Facade 中的 AmqpChannel,或者使用更好的 QueueHandlers 方法进行管理。一个 QueueHandler 应该扩展 Kontoulis\RabbitMQLaravel\Handlers\Handler 类,内置的 ListenToQueue 方法接受一个处理队列消息的处理程序数组。如果数组中存在多个处理程序,某些 Handler 的返回值将在前一个处理程序失败时使用后续的 QueueHandlers。还有一个 Kontoulis\RabbitMQLaravel\Handlers\Handler\DefaultHandler 类作为示例和/或调试处理程序。

namespace Kontoulis\RabbitMQLaravel\Handlers;

use Kontoulis\RabbitMQLaravel\Message\Message;

/**
 * Class DefaultHandler
 * @package Kontoulis\RabbitMQLaravel\Handlers
 */
class DefaultHandler extends Handler{

    /**
     * Tries to process the incoming message.
     * @param Message $msg
     * @return int One of the possible return values defined as Handler
     * constants.
     */

    public function process(Message $msg)
    {
        return $this->handleSuccess($msg);

    }

    /**
     * @param $msg
     * @return int
     */
     protected function handleSuccess($msg)
       {
           var_dump($msg);
           /**
            * For more Handler return values see the parent class
            */
           return Handler::RV_SUCCEED_STOP;
       }
}

要监听队列,您必须将处理程序数组传递给方法

$handlers = ["\\App\\QueueHandlers\\MyHandler"];
\RabbitMQ::listenToQueue($handlers);

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 LICENCE.md