1. Go to this page and download the library: Download hsldymq/bugs-bunny 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/ */
hsldymq / bugs-bunny example snippets
use Archman\BugsBunny\QueueMessage;
use Archman\BugsBunny\WorkerFactory;
use Archman\BugsBunny\Dispatcher;
use Archman\BugsBunny\Worker;
use Archman\BugsBunny\Connection;
// worker工厂,定义了worker创建后的处理逻辑
$factory = (new WorkerFactory())
// 设置当worker空闲n秒后会不再接收消息,并在处理完所有剩余消息后安全退出
// 如果不设置这个,worker永远不会在闲置时退出
->setIdleShutdown($nSec)
// 注册消息处理器,定义worker进程对消息的操作逻辑
->setMessageHandler(function (QueueMessage $message, Worker $worker) {
$queue = $message->getQueue();
$routingKey = $message->getRoutingKey();
// 根据消息的种类执行响应的业务逻辑
})
->registerEvent('start', function (Worker $worker) {
// worker进程启动事件,用于进行一些初始化操作
})
->registerEvent('error', function (string $reason, \Throwable $e, Worker $worker) {
// 处理错误,打日志或其他操作,比如你还可以使用$worker->shutdown();使进程安全退出
});
// 到AMQP服务器连接配置
$options = getAMQPConnectionOptions();
// 从配置中得到所有要消费的队列
$queues = getAllQueues();
$conn = new Connection($options, $queues);
$dispatcher = (new Dispatcher($conn, $factory))
// 限制worker进程上限
// 当消息量非常大而所有worker都处理不过来而时,你不会希望worker进程无止境的被创建的
// 如果你假定不存在这种问题,你可以不设置它
->setMaxWorkers($numWorkers)
// 设置缓存消息数量
// 当worker数量达到上限,我们可以通过缓存一些消息来提高消息派发效率
->setCacheLimit(1000)
->on('start', function (Dispatcher $dispatcher) {
// dispatcher开始运行,可以进行一些初始化操作
})
->on('error', function (string $reason, \Throwable $e, Dispatcher $dispatcher) {
// dispatcher发生一些错误
})
->on('shutdown', function (Dispatcher $dispatcher) {
// dispatcher即将退出
})
->addSignalHandler(SIGINT, function (int $signal, Dispatcher $dispatcher) {
// 可以注册信号处理器,防止因为信号被杀死
// 这里我们可以调用安全关闭方法.
$dispatcher->shutdown();
})
->run(true); // 你可以不传参数,但如果传true则是以daemon运行
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.