2017 © Pedro Peláez
 

library redis-message-broker

message broker component backed with redis

image

m6web/redis-message-broker

message broker component backed with redis

  • Tuesday, April 17, 2018
  • by M6Web
  • Repository
  • 24 Watchers
  • 8 Stars
  • 7,293 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 26 Versions
  • 61 % Grown

The README.md

RedisMessageBroker

This component will help you to build a messages brocker system over a redis backend. It will take advantage of the redis cluster capabilities with the possibility to shard messages into several redis lists while producing messages. Consumer, in no auto-ack mode, implements a working list to be sure not to loose any messages when processing fail., (*1)

By design, producing is super fast (one Redis command) and consuming can be slow if you want to ack messages manually., (*2)

You should use it with Redis >= 2.8., (*3)

usage

producer

<?php
use M6Web\Component\RedisMessageBroker;
use Predis\Client as PredisClient;

$redisClient = new PredisClient(); // refer to PredisDocumentation
$queue = new RedisMessageBroker\Queue\Definition('raoul');
$message = new RedisMessageBroker\MessageEnvelope(uniqid(), 'un message');

$producer = new RedisMessageBroker\MessageHandler\Producer($queue, $redisClient);
$producer->publishMessage($message);

consumer

Consumer should be wrapped in a worker. A unique Id should be pass to the consumer constructor. If you work with a worker, uniqId has to be constant per worker., (*4)

<?php
use M6Web\Component\RedisMessageBroker;
use Predis\Client as PredisClient;

$redisClient = new PredisClient(); // refer to PredisDocumentation
$queue = new RedisMessageBroker\Queue\Definition('raoul');
$consumer = new RedisMessageBroker\MessageHandler\Consumer($queue, $redisClient, uniqid());

$message = $consumer->getMessageEnvelope();

inspector

Inspector methods allow you to count the messages in ready or processing in a queue., (*5)

<?php
use M6Web\Component\RedisMessageBroker;
use Predis\Client as PredisClient;

$redisClient = new PredisClient(); // refer to PredisDocumentation
$queue = new RedisMessageBroker\Queue\Definition('raoul');

$inspector = new RedisMessageBroker\Queue\Inspector($queue, $redisClient);
$countInProgress = $inspector->countInProgressMessages();
$countReady = $inspector->countReadyMessages();

cleanup

Cleanup methods let you perform a cleanup in the message queue. Cleanup is very slow as all the message in the queue will be scanned., (*6)

<?php
use M6Web\Component\RedisMessageBroker;
use Predis\Client as PredisClient;

$redisClient = new PredisClient(); // refer to PredisDocumentation
$queue = new RedisMessageBroker\Queue\Definition('raoul');

$cleanup = new RedisMessageBroker\Queue\Cleanup($queue, $redisClient);
$cleanup->cleanOldMessages(
    3600, // erase messages older than 3600 seconds
    true  // clean message in the ready queue too. Mandatory use if you are in no-autoack mode 
);

queue option

To avoid hotpsots you can shard a queue on several lists :, (*7)

$queue = new RedisMessageBroker\Queue\Definition('raoul', 10); // shard on 10 lists

In this mode, messages will be written and read among the 10 lists. FIFO is no more guaranteed., (*8)

consumer options

manual message acknowledgment

with setNoAutoAck(), (*9)

<?php
use M6Web\Component\RedisMessageBroker;
use Predis\Client as PredisClient;

$redisClient = new PredisClient(); // refer to PredisDocumentation
$queue = new RedisMessageBroker\Queue\Definition('raoul');
$consumer = new RedisMessageBroker\MessageHandler\Consumer($queue, $redisClient, uniqid());
$consumer->setNoAutoAck();

$message = $consumer->getMessageEnvelope();
if ($message) {
    // do something with the message
    $consumer->ack($message); // erase the message from the working list
}

look for old messages not acked by consumers

Each consumer got an unique Id defined during the construction of the object. This Id allow the consumer to define a unique working list where a message is stored between the getMessage and the ack. Is it possible to use LostMessageConsumer class to look on consumer working lists and move message more than x second old (messageTtl parameter) from those lists to a queue list. The maxRetry parameter will put a message in a dead letter list when the retry number is reached., (*10)

```php <?php use M6Web\Component\RedisMessageBroker; use Predis\Client as PredisClient;, (*11)

$redisClient = new PredisClient(); // refer to PredisDocumentation $queue = new RedisMessageBroker\Queue\Definition('raoul'); $consumer = new RedisMessageBroker\MessageHandler\LostMessagesConsumer($queue, $redisClient, 360, 3); $consumer->requeueOldMessages(); ```, (*12)

messageTtl parameter need to be superior of your max time to process a message. (Otherwise it will consider a message old when its processing), (*13)

The Versions

17/04 2018

dev-master

9999999-dev

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

17/04 2018

v0.5.10

0.5.10.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

12/04 2018

v0.5.9

0.5.9.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

12/04 2018

dev-fix/add-param-lost-message-constructor

dev-fix/add-param-lost-message-constructor

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

11/04 2018

v0.5.8

0.5.8.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

11/04 2018

dev-feature/compress-message

dev-feature/compress-message

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

26/03 2018

v0.5.7

0.5.7.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

26/03 2018

dev-feature/fix-redis-message-broker

dev-feature/fix-redis-message-broker

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

15/03 2018

0.5.6

0.5.6.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

15/03 2018

v0.5.3

0.5.3.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

15/03 2018

v0.5.4

0.5.4.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

15/03 2018

v0.5.5

0.5.5.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

28/02 2018

0.5.5

0.5.5.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

09/02 2018

0.5.4

0.5.4.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

08/02 2018

0.5.3

0.5.3.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

08/02 2018

dev-feature/add-getValue-for-statsD-gauge

dev-feature/add-getValue-for-statsD-gauge

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

04/01 2018

v0.5.2

0.5.2.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

04/01 2018

dev-feature/fix-unack-retry

dev-feature/fix-unack-retry

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

12/12 2017

v0.5.1

0.5.1.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

21/11 2017

v0.5.0

0.5.0.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

09/11 2017

v0.4.0

0.4.0.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

09/11 2017

dev-features/refactor-message-handler

dev-features/refactor-message-handler

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

24/08 2017

v0.3.0

0.3.0.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

21/08 2017

v0.2.0

0.2.0.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

21/07 2017

v0.1.0

0.1.0.0

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging

21/07 2017

dev-feature/cleanup

dev-feature/cleanup

message broker component backed with redis

  Sources   Download

MIT

The Requires

 

The Development Requires

by Olivier Mansour

redis queue messaging