saxulum/saxulum-message-queue

此包已废弃且不再维护。作者建议使用 enqueue/enqueue-dev 包。

Saxulum 消息队列

1.0.0-beta1 2016-09-18 15:11 UTC

This package is not auto-updated.

Last update: 2020-09-22 19:09:21 UTC


README

Build Status Total Downloads Latest Stable Version Scrutinizer Code Quality

描述

一个简单易用的消息队列抽象。

要求

  • php: ~7.0

安装

通过 Composer 安装,包名为 saxulum/saxulum-message-queue

使用方法

消息

<?php

namespace My\Project;

use Saxulum\MessageQueue\MessageInterface;

class SampleMessage implements MessageInterface
{
    /**
     * @var string
     */
    private $context;

    /**
     * @var string
     */
    private $message;

    /**
     * @param string $context
     * @param string $message
     */
    public function __construct(string $context, string $message)
    {
        $this->context = $context;
        $this->message = $message;
    }

    /**
     * @param string $json
     *
     * @return MessageInterface
     */
    public static function fromJson(string $json): MessageInterface
    {
        $rawMessage = json_decode($json);

        return new self($rawMessage->context, $rawMessage->message);
    }

    /**
     * @return string
     */
    public function toJson(): string
    {
        return json_encode([
            'context' => $this->context,
            'message' => $this->message,
        ]);
    }

    /**
     * @return string
     */
    public function getContext(): string
    {
        return $this->context;
    }

    /**
     * @return string
     */
    public function getMessage(): string
    {
        return $this->message;
    }
}

RabbitMQ

额外要求

{
    "require": {
        "php-amqplib/php-amqplib": "^2.6.3"
    }
}

发送

<?php

use My\Project\SampleMessage;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use Saxulum\MessageQueue\Redis\RedisSend;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$sender = new RabbitMQSend($connection, 'messages');
$sender->send(new SampleMessage('context', 'this is a message'));

接收

<?php

use My\Project\SampleMessage;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use Saxulum\MessageQueue\Redis\RedisReceive;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$receive = new RabbitMQReceive(SampleMessage::class, $connection, 'messages');
$message = $sender->receive();

Redis

额外要求

{
    "require": {
        "predis/predis": "^1.1.1"
    }
}

发送

<?php

use My\Project\SampleMessage;
use Predis\Client;
use Saxulum\MessageQueue\Redis\RedisSend;

$client = new Client();
$sender = new RedisSend($client, 'messages');
$sender->send(new SampleMessage('context', 'this is a message'));

接收

<?php

use My\Project\SampleMessage;
use Predis\Client;
use Saxulum\MessageQueue\Redis\RedisReceive;

$client = new Client();
$sender = new RedisReceive(SampleMessage::class, $client, 'messages');
$message = $sender->receive();

SystemV

发送

<?php

use My\Project\SampleMessage;
use Saxulum\MessageQueue\SystemV\SystemVSend;

$sender = new SystemVSend(1);
$sender->send(new SampleMessage('context', 'this is a message'));

接收

<?php

use My\Project\SampleMessage;
use Saxulum\MessageQueue\SystemV\SystemVReceive;

$sender = new SystemVReceive(SampleMessage::class, 1);
$message = $sender->receive();

版权

Dominik Zogg 2016