laravel\lumen rabbitmq

1、安装扩展
复制代码
composer require bschmitt/laravel-amqp
2、config文件下增加amqp.php配置文件
php 复制代码
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Define which configuration should be used
    |--------------------------------------------------------------------------
    */

    'use' => env('AMQP_ENV', 'production'),

    /*
    |--------------------------------------------------------------------------
    | AMQP properties separated by key
    |--------------------------------------------------------------------------
    */

    'properties' => [

        'production' => [
            'host'                  => env('AMQP_HOST', 'localhost'),
            'port'                  => env('AMQP_PORT', 5672),
            'username'              => env('AMQP_USER', ''),
            'password'              => env('AMQP_PASSWORD', ''),
            'vhost'                 => env('AMQP_VHOST', '/'),
            'connect_options'       => [],
            'ssl_options'           => [],

            'exchange'              => env('AMQP_EXCHANGE', 'amq.topic'),
            'exchange_type'         => 'direct',
            'exchange_passive'      => false,
            'exchange_durable'      => true,
            'exchange_auto_delete'  => false,
            'exchange_internal'     => false,
            'exchange_nowait'       => false,
            'exchange_properties'   => [],

            'queue_force_declare'   => false,
            'queue_passive'         => false,
            'queue_durable'         => true,
            'queue_exclusive'       => false,
            'queue_auto_delete'     => false,
            'queue_nowait'          => false,
            'queue_properties'      => ['x-ha-policy' => ['S', 'all']],

            'consumer_tag'          => '',
            'consumer_no_local'     => false,
            'consumer_no_ack'       => false,
            'consumer_exclusive'    => false,
            'consumer_nowait'       => false,
            'consumer_properties'   => [],
            'timeout'               => 0,
            'persistent'            => false,
            'publish_timeout'       => 0, // Only applicable when a publish is marked as mandatory
            'qos'                   => false,
            'qos_prefetch_size'     => 0,
            'qos_prefetch_count'    => 1,
            'qos_a_global'          => false
        ],

    ],

];
3、app\Console\Commands文件下增加生产者消费者文件
生产者
php 复制代码
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Symfony\Component\Console\Input\InputOption;
use Db;
use Bschmitt\Amqp\Facades\Amqp;

class PublishAmqpCommand extends Command
{
    // 命令名
    protected $name = 'zj:publishamqp';
    // 描述
    protected $description = "publish msg to mq";
    /**
     * 命令的名称及其签名
     *
     * @var string
     */
    protected $signature = ' zj:publishamqp {msg}';

    // 执行
    public function handle()
    {
        Amqp::publish('', $this->argument('msg') , ['queue' => 'queue-name']);
    }
}
消费者
php 复制代码
<?php

namespace App\Console\Commands;

use App\Http\Controllers\SurveyController;
use http\Env;
use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Symfony\Component\Console\Input\InputOption;
use Bschmitt\Amqp\Facades\Amqp;

class ConsumeAmqpCommand extends Command
{
    // 命令名
    protected $name = 'zj:consumeamqp';
    // 描述
    protected $description = "consume msg from mq";

    // 执行
    public function handle()
    {
        $obj = $this;
        Amqp::consume('queue-name', function ($message, $resolver) use ($obj) {
            if($message->body){
                $data = json_decode($message->body,true);
                //处理数据
            }
            $obj->info($message->body);
            $resolver->acknowledge($message);
        }, [
            'routing' => 'exportdata',
            'persistent' => true, // required if you want to listen forever
        ]);
    }
}
注意:生产者和消费者的队列名称需要一致
4、bootstrap/app.php中增加
php 复制代码
$app->configure('amqp');
$app->register(Bschmitt\Amqp\LumenServiceProvider::class);
5、app/Console/Kernel.php
php 复制代码
<?php

namespace App\Console;

use App\Console\Commands\ConsumeAmqpCommand;
use App\Console\Commands\PublishAmqpCommand;
use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
        PublishAmqpCommand::class,
        ConsumeAmqpCommand::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        //
    }
}

执行消费者命令

php 复制代码
php artisan zj:consumeamqp

执行生产者命令:

php 复制代码
php artisan zj:publishamqp "hello mq"

注意:1、如果使用路由ConsumeAmqpCommand 文件中 增加routing 不需要删除即可

2、多消费者:需要几个消费者增加ConsumeAmqpComman文件

相关推荐
BingoGo18 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack18 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
BingoGo4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·laravel
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php