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文件

相关推荐
hopetomorrow31 分钟前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
网络安全-杰克38 分钟前
网络安全概论
网络·web安全·php
不是二师兄的八戒40 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
黑客Ela2 小时前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php
蝶开三月4 小时前
php:使用socket函数创建WebSocket服务
网络·websocket·网络协议·php·socket
Ai 编码助手5 小时前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
wkj0016 小时前
php操作redis
开发语言·redis·php
黑客Ash15 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy15 小时前
计算机网络(第一章)
网络·计算机网络·php
阳光帅气男孩17 小时前
PhpSpreadsheet导出图片
php