PHP code example of hsldymq / bugs-bunny

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运行