Swarrot

可从任何 Broker 处接收信息的程序库。「A lib to consume message from any Broker」

Swarrot

Build Status
Scrutinizer Quality Score
Latest Stable Version
Latest Unstable Version

Swarrot is a PHP library to consume messages from any broker.

Installation

The recommended way to install Swarrot is through
Composer. Require the swarrot/swarrot package:

$ composer require swarrot/swarrot

Usage

Basic usage

First, you need to create a message provider to retrieve messages from your
broker. For example, with a PeclPackageMessageProvider (retrieves messages from
an AMQP broker with the pecl amqp package:

use Swarrot\Broker\MessageProvider\PeclPackageMessageProvider;

// Create connection
$connection = new \AMQPConnection();
$connection->connect();
$channel = new \AMQPChannel($connection);
// Get the queue to consume
$queue = new \AMQPQueue($channel);
$queue->setName('global');

$messageProvider = new PeclPackageMessageProvider($queue);

Once it's done you need to create a Processor to process messages retrieved
from the broker. This processor must implement
Swarrot\Processor\ProcessorInterface. For example:

use Swarrot\Processor\ProcessorInterface;
use Swarrot\Broker\Message;

class Processor implements ProcessorInterface
{
    public function process(Message $message, array $options)
    {
        echo sprintf("Consume message #%d\n", $message->getId());

        return true; // Continue processing other messages
    }
}

You now have a Swarrot\Broker\MessageProviderInterface to retrieve messages
and a Processor to process them. So, ask the Swarrot\Consumer to do its job :

use Swarrot\Consumer;

$consumer = new Consumer($messageProvider, $processor);
$consumer->consume();

Using a stack

Heavily inspired by stackphp/builder you
can use Swarrot\Processor\Stack\Builder to stack your processors.
Using the built in processors or by creating your
own
, you can extend the behavior of your
base processor.
In this example, your processor is decorated by 2 other processors. The
ExceptionCatcherProcessor
which decorates your own with a try/catch block and the
MaxMessagesProcessor
which stops your worker when some messages have been consumed.

use Swarrot\Processor\ProcessorInterface;
use Swarrot\Broker\Message;

class Processor implements ProcessorInterface
{
    public function process(Message $message, array $options)
    {
        echo sprintf("Consume message #%d\n", $message->getId());
    }
}

$stack = (new \Swarrot\Processor\Stack\Builder())
    ->push('Swarrot\Processor\MaxMessages\MaxMessagesProcessor', new Logger())
    ->push('Swarrot\Processor\ExceptionCatcher\ExceptionCatcherProcessor')
    ->push('Swarrot\Processor\Ack\AckProcessor', $messageProvider)
;

$processor = $stack->resolve(new Processor());

Here is an illustration to show you what happens when this order is used:

this

Processors

Official processors

Create your own processor

To create your own processor and be able to use it with the StackProcessor, you
just need to implement ProcessorInterface and to take another
ProcessorInterface as first argument in constructor.

Deprecated processors & message providers / publishers

In order to reduce swarrot/swarrot dependencies & ease the maintenance, some
processors & message providers / publishers have been deprecated in 3.x version.
They will be deleted in 4.0.

If you use those deprecated classes you could create your own repository to
keep them or we could create a dedicated repository under the swarrot
organisation if you're willing to help to maintain them.

Message providers / publishers

  • SQS Message provider (in 3.5.0)
  • Stomp message providers (in 3.6.0)
  • Stomp message publishers (in 3.7.0)
  • Interop message publishers & providers (in 3.7.0)

Processors

  • SentryProcessor (in 3.5.0)
  • RPC related processors (in 3.5.0)
  • NewRelicProcessor (in 3.7.0)

Inspiration

License

Swarrot is released under the MIT License. See the bundled LICENSE file for details.

主要指標

概覽
名稱與所有者swarrot/swarrot
主編程語言PHP
編程語言PHP (語言數: 3)
平台
許可證MIT License
所有者活动
創建於2014-02-21 15:57:54
推送於2025-02-21 16:11:16
最后一次提交
發布數58
最新版本名稱v4.19.0 (發布於 )
第一版名稱v1.0.0 (發布於 )
用户参与
星數365
關注者數14
派生數55
提交數628
已啟用問題?
問題數47
打開的問題數4
拉請求數201
打開的拉請求數1
關閉的拉請求數21
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?