PHP code example of roiwk / rabbitmq
1. Go to this page and download the library: Download roiwk/rabbitmq 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/ */
roiwk / rabbitmq example snippets
// 配置格式
$config = [
'host' => '127.0.0.1',
'port' => 5672,
'vhost' => '/',
'mechanism' => 'AMQPLAIN',
'user' => 'username',
'password' => 'password',
'timeout' => 10,
'heartbeat' => 60,
'heartbeat_callback' => function(){},
'error_callback' => null,
];
// 同步发布者 sync Publisher
Roiwk\Rabbitmq\Producer::connect($config)->publishSync('Hello World!', '', '', 'hello');
// 异步发布者 async Publisher(workerman)
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function() use($config) {
Roiwk\Rabbitmq\Producer::connect($config)->publishAsync('Hello World!', '', '', 'hello');
};
Worker::runAll();
// 同步消费者 sync Consumer
use Bunny\Channel;
use Bunny\Message;
use Bunny\AbstractClient;
use Roiwk\Rabbitmq\AbstractConsumer;
// style 1:
$client = new Roiwk\Rabbitmq\Client($config, null, '', '', 'hello');
$client->syncProcess(function(Message $message, Channel $channel, AbstractClient $client){
echo " [x] Received ", $message->content, "\n";
$channel->ack();
});
// style 2:
$consumer = new class ($config) extends AbstractConsumer {
protected bool $async = false;
protected string $queue = 'hello';
protected array $consume = [
'noAck' => true,
];
public function consume(Message $message, Channel $channel, AbstractClient $client)
{
echo " [x] Received ", $message->content, "\n";
}
};
$consumer->onWorkerStart(null);
// 异步消费者 async Consumer(workerman)
use Bunny\Channel;
use Bunny\Message;
use Workerman\Worker;
use Bunny\AbstractClient;
use Roiwk\Rabbitmq\AbstractConsumer;
$worker = new Worker();
$consumer = new class ($config) extends AbstractConsumer {
protected bool $async = true;
protected string $queue = 'hello';
protected array $consume = [
'noAck' => true,
];
public function consume(Message $message, Channel $channel, AbstractClient $client)
{
echo " [x] Received ", $message->content, "\n";
}
};
$worker->onWorkerStart = [$consumer, 'onWorkerStart'];
Worker::runAll();
'hello-rabbitmq' => [
'handler' => app\queue\rabbitmq\Hello::class,
'count' => 1,
'constructor' => [
'rabbitmqConfig' => $config,
//'logger' => Log::channel('hello'),
],
]
namespace app\queue\rabbitmq;
use Roiwk\Rabbitmq\AbstractConsumer;
use Roiwk\Rabbitmq\Producer;
use Bunny\Channel;
use Bunny\Message;
use Bunny\AbstractClient;
class Hello extends AbstractConsumer
{
protected bool $async = true;
protected string $queue = 'hello';
protected array $consume = [
'noAck' => true,
];
public function consume(Message $message, Channel $channel, AbstractClient $client)
{
echo " [x] Received ", $message->content, "\n";
}
}
'hello-rabbitmq' => [
'handler' => Roiwk\Rabbitmq\GroupConsumers::class,
'count' => 2,
'constructor' => [
'consumer_dir' => app_path().'/queue/rabbimq',
'rabbitmqConfig' => $config,
//'logger' => Log::channel('hello'),
],
]
app\queue\rabbitmq\Hello.php