PHP code example of medeiroz / laravel-amqp-toolkit
1. Go to this page and download the library: Download medeiroz/laravel-amqp-toolkit library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
medeiroz / laravel-amqp-toolkit example snippets
// config for Medeiroz/AmqpToolkit
return [
'schemas' => base_path('amqp-toolkit-schemas'),
'table_name' => env('AMQP_TABLE_NAME', 'amqp_schemas'),
'max-attempts' => env('AMQP_MAX_ATTEMPTS', 10),
'heartbeat' => env('AMQP_HEARTBEAT', 30),
'keepalive' => env('AMQP_KEEPALIVE', true),
/**
* The default connection to use when no connection is provided to the AMQP client.
*/
'connection' => env('AMQP_CONNECTION', 'rabbitmq'),
/**
* The default logging channel to use when no channel is provided to the AMQP client.
* You can use the same channels as the Laravel logging configuration
* Like as 'stack', 'single', 'daily' etc...
*/
'logging-channel' => env('AMQP_LOG_CHANNEL', env('LOG_CHANNEL')),
/**
* The queues to be consumed by the consumer command without arguments.
*/
'consumer-queues' => [
// 'payment-received' => \App\Listeners\PaymentReceivedListener::class,
],
'connections' => [
'rabbitmq' => [
'host' => env('AMQP_HOST', 'localhost'),
'port' => env('AMQP_PORT', 5672),
'api-port' => env('AMQP_API_PORT', 15672),
'user' => env('AMQP_USER', 'guest'),
'password' => env('AMQP_PASSWORD', ''),
'vhost' => env('AMQP_VHOST', '/'),
],
],
];
/**
* The queues to be consumed by the consumer command without arguments.
*/
'consumer-queues' => [
'payment-received' => \App\Listeners\PaymentReceivedListener::class,
],
use Medeiroz\AmqpToolkit\Facades\AmqpPublisher;
AmqpPublisher::onQueue(['say' => 'Hello World'], 'my-queue-name');
AmqpPublisher::onExchange(['say' => 'Hello World'], 'my-exchange-name');
AmqpPublisher::onExchange(['say' => 'Hello World with routing key'], 'my-exchange-name', 'my-routing-key');
public function boot() {
Event::listen(
'amqp:payment-received',
\App\Listeners\PaymentReceivedListener::class,
);
Event::listen(
'amqp:my-queue',
\App\Listeners\MyQueueListener::class,
);
Event::listen(
'amqp:*',
\App\Listeners\AllListener::class,
);
}
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Medeiroz\AmqpToolkit\Events\AmqpReceivedMessageEvent;
class PaymentReceivedListener
{
public function handle(AmqpReceivedMessageEvent $event): void
{
\Log::debug('Queue' . $event->queue);
\Log::debug('Message Body', $event->messageBody);
}
}
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Medeiroz\AmqpToolkit\Events\AmqpReceivedMessageEvent;
class PaymentReceivedListener implements ShouldQueue
{ /* ... */ }
use Medeiroz\AmqpToolkit\SchemaMigration\SchemaMigration;
return new class extends SchemaMigration
{
private const NAME = 'my-exchange';
public function up(): void
{
$this->createExchangeIfNonExists(self::NAME);
}
public function down(): void
{
$this->deleteExchangeIfExists(self::NAME);
}
};
use Medeiroz\AmqpToolkit\SchemaMigration\SchemaMigration;
return new class extends SchemaMigration
{
private const NAME = 'payment-received';
public function up(): void
{
$this->createQueueIfNonExists(self::NAME)
->withRetry()
->withTtl(seconds: 5)
->withDlq();
}
public function down(): void
{
$this->deleteQueueIfExists(self::NAME);
$this->deleteQueueIfExists(self::NAME . '.retry');
$this->deleteQueueIfExists(self::NAME . '.dlq');
}
};
// ...
public function up(): void
{
$this->createQueue('my-queue')
->bind('my-exchange', 'my-route-key');
}
// or
public function up(): void
{
$this->createQueue('my-queue');
$this->bind('my-queue', 'my-exchange', 'my-route-key');
}
use Medeiroz\AmqpToolkit\SchemaMigration\SchemaMigration;
use Medeiroz\AmqpToolkit\SchemaMigration\Shovel\Resource0dot9;
use Medeiroz\AmqpToolkit\SchemaMigration\Shovel\Resource1dot0;
return new class extends SchemaMigration
{
private const NAME = 'my-shovel';
public function up(): void
{
$this->createShovelIfNonExists(
name: self::NAME,
source: new Resource0dot9(
type: 'queue',
uri: 'amqp://',
queue: 'my-queue-on-amqp-0-9',
autoDelete: 'never',
addForwardingHeaders: 'No',
),
destination: new Resource1dot0(
uri: 'amqps://user:[email protected]:5671/?verify=verify_none',
address: 'my-topic-on-service-bus',
),
);
}
public function down(): void
{
$this->deleteShovelIfExists(self::NAME);
}
};