2017 © Pedro Peláez
 

library rabbit-queue

A basic package to publish and/or consume AMQP messages via RabbitMQ

image

brash-creative/rabbit-queue

A basic package to publish and/or consume AMQP messages via RabbitMQ

  • Friday, November 10, 2017
  • by brash-creative
  • Repository
  • 1 Watchers
  • 2 Stars
  • 15 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 9 Versions
  • 0 % Grown

The README.md

Build Status, (*1)

Basic RabbitMQ interface

A basic package to publish and/or consume AMQP messages via RabbitMQ, (*2)

First, you need to create your queue class, which extends the Rabbit Brash\RabbitQueue\RabbitQueue class with the queue parameter set with your desired queue name., (*3)

<?php
use Brash\RabbitQueue\RabbitQueue

class MyQueue extends RabbitQueue {

    protected $queue = 'EXAMPLE_QUEUE';

    public function __construct(AMQPConnection $connection)
    {
        parent::__construct($connection)
    }

    public function getQueue(): string 
    {
        return $this->queue;
    }
}

This class can then be used to push/pull all messages to that queue., (*4)

Usage Example - Publish

<?php
use PhpAmqpLib\Connection\AMQPStreamConnection;
use Brash\RabbitQueue\QueueException;

try {
    // AMQPConnection(host, port, username, password)
    $message    = "This is my message";
    $amqp       = new AMQPStreamConnection('http://myrabbithost', 5672, 'guest', 'guest');
    $publish    = new MyQueue($amqp);
    $publish->push($message);
} catch (QueueException $e) {
    // Catch publish errors
} catch (\Exception $e) {
    // Catch all other errors
}

The consumer will retrieve messages from the queue and pass them to the chosen processor., (*5)

Processor methods involve passing a callable method, object/method pair or class path constant of an invokable class, e.g., (*6)

$consume->pull([$class, 'method']);
$consume->pull(function (AMQPMessage $message){
    // Some code
})
$consume->pull(ExampleConsumer::class);

In the final example, ExampleConsumer class would look like:, (*7)

For example:, (*8)

class ExampleConsumer
{
    public function __invoke(AMPQMessage $message)
    {
        // Code
    }   
}

You can also choose to pull messages down with or without acknowledgement., (*9)

Usage Example - Consume (acknowledgement)

<?php
use PhpAmqpLib\Connection\AMQPStreamConnection;
use Brash\RabbitQueue\QueueException;

// A class containing a method that the consumer can send the retrieved message body
try {
    $amqp           = new AMQPStreamConnection('http://myrabbithost', 5672, 'guest', 'guest');
    $consume        = new MyQueue($amqp);
    $consume->pull(ExampleConsumer::class);

    // Keep listening to the queue...
    $consume->poll();
} catch (QueueException $e) {
    // Catch consume errors
} catch (\Exception $e) {
    // Catch all other errors
}

When using this method, you will have to send the acknowledgement after the message has been processed in the method you defined., (*10)

In this example..., (*11)

<?php
use PhpAmqpLib\Message\AMQPMessage;

class ExampleConsumer {
    public function __invoke(AMQPMessage $message)
    {
        $body = $message->body;

        // Do something with the message

        $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
    }
}

Alternatively, you can extend the included AcknowledgableConsumer abstract class and call the acknowledge method:, (*12)

<?php
use PhpAmqpLib\Message\AMQPMessage;
use Brash\RabbitQueue\AcknowledgableConsumer;

class ExampleConsumer extends AcknowledgableConsumer
{
    public function __invoke(AMQPMessage $message)
    {
        $body = $message->body;

        // Do something with the message

        $this->acknowledge($message);
    }
}

Usage Example - Consume (no acknowledgement)

<?php
use PhpAmqpLib\Connection\AMQPStreamConnection;
use Brash\RabbitQueue\QueueException;

// A class containing a method that the consumer can send the retrieved message body
try {
    $amqp           = new AMQPStreamConnection('http://myrabbithost', 5672, 'guest', 'guest');
    $consume        = new MyQueue($amqp);
    $consume->pullNoAck(ExampleConsumer::class);

    // Keep listening to the queue...
    $consume->poll();
} catch (QueueException $e) {
    // Catch consume errors
} catch (\Exception $e) {
    // Catch all other errors
}

The Versions

10/11 2017

dev-develop

dev-develop

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

10/11 2017

dev-master

9999999-dev

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

10/11 2017

2.0.0

2.0.0.0

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

10/11 2017

dev-feature/use-invokables

dev-feature/use-invokables

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

10/12 2015

1.1.0

1.1.0.0

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

05/09 2014

1.0.1

1.0.1.0

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

19/08 2014

1.0.0

1.0.0.0

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

31/01 2014

0.1.1

0.1.1.0

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley

09/10 2013

0.1.0

0.1.0.0

A basic package to publish and/or consume AMQP messages via RabbitMQ

  Sources   Download

The Requires

 

The Development Requires

by paulcrashley