saxulum-message-queue
, (*1)
Description
A simple to use messaging queue abstraction., (*2)
Requirements
Installation
Through Composer as [saxulum/saxulum-message-queue][1]., (*3)
Usage
Message
```{.php}
<?php, (*4)
namespace My\Project;, (*5)
use Saxulum\MessageQueue\MessageInterface;, (*6)
class SampleMessage implements MessageInterface
{
/**
* @var string
*/
private $context;, (*7)
/**
* @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;
}
}, (*8)
### RabbitMQ
#### Additional Requirements
```{.json}
{
"require": {
"php-amqplib/php-amqplib": "^2.6.3"
}
}
Send
```{.php}
<?php, (*9)
use My\Project\SampleMessage;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use Saxulum\MessageQueue\Redis\RedisSend;, (*10)
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$sender = new RabbitMQSend($connection, 'messages');
$sender->send(new SampleMessage('context', 'this is a message'));, (*11)
#### Receive
```{.php}
<?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
Additional Requirements
```{.json}
{
"require": {
"predis/predis": "^1.1.1"
}
}, (*12)
#### Send
```{.php}
<?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'));
Receive
```{.php}
<?php, (*13)
use My\Project\SampleMessage;
use Predis\Client;
use Saxulum\MessageQueue\Redis\RedisReceive;, (*14)
$client = new Client();
$sender = new RedisReceive(SampleMessage::class, $client, 'messages');
$message = $sender->receive();, (*15)
### SystemV
#### Send
```{.php}
<?php
use My\Project\SampleMessage;
use Saxulum\MessageQueue\SystemV\SystemVSend;
$sender = new SystemVSend(1);
$sender->send(new SampleMessage('context', 'this is a message'));
Receive
```{.php}
<?php, (*16)
use My\Project\SampleMessage;
use Saxulum\MessageQueue\SystemV\SystemVReceive;, (*17)
$sender = new SystemVReceive(SampleMessage::class, 1);
$message = $sender->receive();
```, (*18)
Copyright
Dominik Zogg 2016, (*19)