Amqp
php-amqplib wrapper that eases the consumption of RabbitMQ. A painless way of using RabbitMQ
Install / Use
/learn @ssi-anik/AmqpREADME
anik/amqp

anik/amqp is a php-amqplib wrapper that eases the consumption of RabbitMQ. A painless way of using RabbitMQ.
Note
Previously, the package could be used with Laravel, Laravel Zero, Lumen out of the box. From v2, the Laravel support
has been removed. If you are looking for implementation with Laravel, you can
use anik/laravel-amqp. If you were using this package with Laravel, and you want to upgrade to Laravel 9, please consider using anik/amqp-to-laravel-amqp if you want to migrate to anik/laravel-amqp later.
Examples
Checkout the repository for example.
Requirements
- PHP
^7.2 | ^8.0 - PHP-AMQPLib
^3.0
Installation
To install the package, run
composer require anik/amqp
Documentation
For V1: https://medium.com/@sirajul.anik/rabbitmq-for-php-developers-c17cd019a90
Connection
To create an AMQP Connection, you can use
Anik\Amqp\AmqpConnectionFactory::makeAnik\Amqp\AmqpConnectionFactory::makeFromArray
<?php
use Anik\Amqp\AmqpConnectionFactory;
use PhpAmqpLib\Connection\AMQPLazySSLConnection;
$host = '127.0.0.1';
$port = 5672;
$user = 'user';
$password = 'password';
$vhost = '/';
$options = []; // options to be proxied to the amqp connection class
$ofClass = AMQPLazySSLConnection::class;
$connection = AmqpConnectionFactory::make($host, $port, $user, $password, $vhost, $options, $ofClass);
$hosts = [
[
'host' => $host,
'port' => $port,
'user' => $user,
'password' => $password,
'vhost' => $vhost,
],
[
'host' => $host,
'port' => $port,
'user' => $user,
'password' => $password,
'vhost' => $vhost,
]
];
// With AmqpConnectionFactory::makeFromArray method, you can try to connect to multiple host
$connection = AmqpConnectionFactory::makeFromArray($hosts, $options, $ofClass);
Exchange
Also, there are four specific exchange classes.
Anik\Amqp\Exchanges\Directfor direct exchange.Anik\Amqp\Exchanges\Fanoutfor fanout exchange.Anik\Amqp\Exchanges\Headersfor headers exchange.Anik\Amqp\Exchanges\Topicfor topic exchange.
You can still use Anik\Amqp\Exchanges\Exchange base class to create your own exchange.
To instantiate an exchange, you can do like
<?php
use Anik\Amqp\Exchanges\Exchange;
use Anik\Amqp\Exchanges\Fanout;
use Anik\Amqp\Exchanges\Topic;
$exchange = new Exchange('anik.amqp.direct.exchange', Exchange::TYPE_DIRECT);
$exchange = Exchange::make(['name' => 'anik.amqp.direct.exchange', 'type' => Exchange::TYPE_DIRECT]);
$exchange = new Topic('anik.amqp.topic.exchange');
$exchange = Fanout::make(['name' => 'anik.amqp.fanout.exchange']);
When creating an exchange instance with
Exchange::make-nameandtypekeys must be present in the given array.Topic::makeFanout::makeHeaders::makeDirect::make-namekey must be present in the given array.
Anik\Amqp\Exchanges\Exchange contains a few predefined exchange types, you can use them as reference.
TYPE_DIRECTfor direct type.TYPE_TOPICfor topic type.TYPE_FANOUTfor fanout type.TYPE_HEADERSfor headers type.
The Exchange::make method also accepts the following keys when making an exchange instance.
declareType:bool. Default:false. If you want to declare the exchange.passiveType:bool. Default:false. If the exchange is passive.durableType:bool. Default:true. If the exchange is durable.auto_deleteType:bool. Default:false. If the exchange should auto delete.internalType:bool. Default:false. If the exchange is internal.no_waitType:bool. Default:false. If the client should not wait for the server's reply.argumentsType:array. Default:[].ticketType:null | integer. Default:null.
You can also reconfigure the exchange instance using $exchange->reconfigure($options). The $options array accepts
the above keys as well.
Also, you can use the following methods to configure your exchange instance.
setName- Accepts:string. The only way to change exchange name after instantiation.setDeclare- Accepts:bool.setType- Accepts:bool.setPassive- Accepts:bool.setDurable- Accepts:bool.setAutoDelete- Accepts:bool.setInternal- Accepts:bool.setNowait- Accepts:bool.setArguments- Accepts:array.setTicket- Accepts:null | integer.
Queue
To instantiate a queue, you can do like
<?php
use Anik\Amqp\Queues\Queue;
$queue = new Queue('anik.amqp.direct.exchange.queue');
$queue = Queue::make(['name' => 'anik.amqp.direct.exchange.queue']);
When creating a queue instance with
Queue::make-namekeys must be present in the given array.
The Queue::make method also accepts the following keys when making a queue instance.
declareType:bool. Default:false. If you want to declare the queue.passiveType:bool. Default:false. If the queue is passive.durableType:bool. Default:true. If the queue is durable.exclusiveType:bool. Default:false. If the queue is exclusive.auto_deleteType:bool. Default:false. If the queue should auto delete.no_waitType:bool. Default:false. If the client should not wait for the server's reply.argumentsType:array. Default:[].ticketType:null | integer. Default:null.
You can also reconfigure the queue instance using $queue->reconfigure($options). The $options array accepts the
above keys as well.
Also, you can use the following methods to configure your queue instance.
setName- Accepts:string. The only way to change queue name after instantiation.setDeclare- Accepts:bool.setType- Accepts:bool.setPassive- Accepts:bool.setDurable- Accepts:bool.setExclusive- Accepts:bool.setAutoDelete- Accepts:bool.setNowait- Accepts:bool.setArguments- Accepts:array.setTicket- Accepts:null | integer.
Qos
To instantiate a Qos, you can do like
<?php
use Anik\Amqp\Qos\Qos;
$prefetchSize = 0;
$prefetchCount = 0;
$global = false;
$qos = new Qos($prefetchSize, $prefetchCount, $global);
$qos = Queue::make(['prefetch_size' => $prefetchSize, 'prefetch_count' => $prefetchCount, 'global' => $global]);
The Qos::make method also accepts the following key when making a qos instance.
prefetch_sizeType:int. Default:0.prefetch_countType:int. Default:0.globalType:bool. Default:true.
You can also reconfigure the qos instance using $qos->reconfigure($options). The $options array accepts the above
keys as well.
Also, you can use the following methods to configure your qos instance.
setPrefetchCount- Accepts:int.setPrefetchSize- Accepts:int.setGlobal- Accepts:bool.
Publish/Produce message
To produce/publish messages, you'll need the Anik\Amqp\Producer instance. To instantiate the class
<?php
use Anik\Amqp\Producer;
$producer = new Producer($connection, $channel);
The constructor accepts
$connectionType:PhpAmqpLib\Connection\AbstractConnection. Required.$channelType:null | PhpAmqpLib\Channel\AMQPChannel. Optional.
If $channel is not provided or null, class uses the channel from the $connection.
Once the producer class is instantiated, you can set a channel with setChannel. Method
accepts PhpAmqpLib\Channel\AMQPChannel instance.
There are three ways to publish messages
Bulk Publish
Producer::publishBatch - to publish multiple messages in bulk.
<?php
use Anik\Amqp\Producer;
(new Producer($connection))->publishBatch($messages, $routingKey, $exchange, $options);
$messagesType:Anik\Amqp\Producible[]. If any of the message is not the type ofProducibleinterface, it'll throw error.$routingKeyType:string. Routing key. Default''(empty string).$exchangeType:null | Anik\Amqp\Exchanges\Exchange.$optionsType:array. Runtime configuration.- Key
exchange- Accepts:array.- If you pass
nullas$exchange, then you must provide a valid configuration through this key to create an exchange under the hood. If you pass$exchangewith Exchange instance and$options['exchange'], exchange instance will be reconfigured accordingly with the values available in$options['exchange']. Keys are same asExchange::make's$options.
- If you pass
- Key
publish- Accepts:array.- Key
mandatoryDefaultfalse. - Key
immediateDefaultfalse. - Key
ticketDefaultnull. - Key
batch_count. Default:500. To make a batch of X messages before publishing a batch.
- Key
- Key
Publish
Producer::publish - to publish a single message. Uses Producer::publishBatch under the hood.
<?php
use Anik\Amqp\Producer;
(new Producer($connection))->publish($message, $routingKey, $exchange, $options);
$messageType:Anik\Amqp\Producible.$routingKeyType:string. Routing key. Default''(empty string).$exchangeType:null | Anik\Amqp\Exchanges\Exchange.$optionsType:array. Runtime configuration.- Key
exchange- Accepts:array.- If you pa
- Key
Related Skills
node-connect
341.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.5kCommit, push, and open a PR
