laravel\lumen rabbitmq

1、安装扩展
composer require bschmitt/laravel-amqp
2、config文件下增加amqp.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

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

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中增加
$app->configure('amqp');
$app->register(Bschmitt\Amqp\LumenServiceProvider::class);
 5、app/Console/Kernel.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 artisan zj:consumeamqp

执行生产者命令:

php artisan zj:publishamqp "hello mq"

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值