laravel8-rabbitmq消息队列-实时监听跨服务器消息

使用场景介绍:

1)用于实时监听远程服务器发出的消息(json格式消息),接受并更新消息状态,存储到本地服务器

2)环境:lNMP(laravel8)

3)服务器需要开启rabbitmq驱动队列

1、composer安装rabbitmq扩展包

vladimir-yuldashev/laravel-queue-rabbitmq

参考文档:https://blog.csdn.net/u012321434/article/details/126246141

2、安装配置文件

  1. 打开app/config/queue.php中connections数组中添加以下代码,根据实际情况填写相关配置信息

    'rabbitmq' => [
    'driver' => 'rabbitmq',
    'queue' => env('RABBITMQ_QUEUE', 'default'),
    'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
    'hosts' => [
    [
    'host' => env('RABBITMQ_HOST', '127.0.0.1'),
    'port' => env('RABBITMQ_PORT', 5672),
    'user' => env('RABBITMQ_USER', 'guest'),
    'password' => env('RABBITMQ_PASSWORD', 'guest'),
    'vhost' => env('RABBITMQ_VHOST', '/'),
    ],
    ],
    'options' => [
    'ssl_options' => [
    'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', false),
    ],
    'queue' => [
    //此处直接添加到自定义的job任务中
    'job' => App\Jobs\Rabbitmq\RabbitMQJob::class,

    复制代码
                     //以下配置是rabbitmq 广播模式(direct)
                     'exchange' => 'amq',
                     'exchange_type' => 'direct',
                     'exchange_routing_key' => '',
                 ],
             ],
    
             /*
              * Set to "horizon" if you wish to use Laravel Horizon.
              */
             'worker' => env('RABBITMQ_WORKER', 'default'),
         ],
  2. .env文件中配置相关参数信息

    RABBITMQ_HOST=127.0.0.1
    RABBITMQ_PORT=5672
    RABBITMQ_USER=testuser
    RABBITMQ_PASSWORD=test
    RABBITMQ_VHOST=/project
    RABBITMQ_QUEUE=que_project

  3. 在app/config/logging.php文件channels选项中添加自定义log日志,记录报错日志信息

    'rabbitmq' => [
    'driver' => 'daily',
    'path' => storage_path('logs/rabbitmq.log'),
    'level' => env('LOG_LEVEL', 'debug'),
    'days' => 14,
    ],

  4. RabbitMQJob.php

    namespace App\Jobs\Rabbitmq;

    use Illuminate\Support\Str;
    use VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob as BaseJob;
    use App\Services\Rabbitmq\RabbitmqService;

    class RabbitMQJob extends BaseJob
    {
    public tries = 1; public timeout = 3600;
    public $maxExceptions = 3;

    复制代码
     public function fire()
     {
         $payload = $this->payload();
         (new RabbitmqService())->handle($payload['data']);
         $this->delete();
     }
    
     /**
      * Get the decoded body of the job.
      * 接收消息体并自定义处理
      * @return array
      */
     public function payload()
     {
         return [
             'uuid' => (string) Str::uuid(),
             'job'  => '\App\Services\Rabbitmq\RabbitmqService@handle',
             'maxTries' => $this->tries,
             'maxExceptions' => $this->maxExceptions,
             'timeout' => $this->timeout,
             'data' => json_decode($this->getRawBody(), true)
         ];
     }
    
     /**
      * Process an exception that caused the job to fail.
      *
      * @param  \Throwable|null  $e
      * @return void
      */
     protected function failed($e)
     {
         (new RabbitmqService())->failed($e);
    
     }

    }

  5. RabbitmqService.php

    namespace App\Services\Rabbitmq;

    use Illuminate\Support\Facades\Log;

    class RabbitmqService
    {
    protected logName = 'rabbitmq'; protected connection;
    protected channel; public messageService;

    复制代码
     /**
      * 处理消息状态
      * @param $message .接收到的消息
      * @return bool
      */
     public function handle($message='')
     {
         //1.判断接收的消息情况
         Log::channel($this->logName)->info('接收的消息体:'.json_encode($message));
     	//接收到的消息
         $message = json_decode(json_encode($message), true);
         //2.消息自定义处理
     		
     }
    
     /**
      * 异常扑获
      * @param \Exception $exception
      */
     public function failed(\Exception $exception)
     {
         Log::channel($this->logName)->info('异常:'.json_encode($exception->getMessage()));
     }

    }

  6. 服务器开启rabbitmq队列驱动,开始监听消息

    php artisan queue:work rabbitmq

相关推荐
ITxiaobing20231 小时前
海外广告投放的 IP 定位服务怎么选?一份基于实测数据的选型参考
网络协议·tcp/ip·php
weixin_417396831 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
ServBay2 小时前
PHP 突爆 9.2 分高危漏洞,你升级了吗?
后端·php
综合简报3 小时前
黑五海外发稿投给谁?三类海外媒体发稿渠道的分工
开发语言·php·媒体
子兮曰5 小时前
PHP漏洞危机,你的网站升级了吗?
前端·后端·php
Behavior5 小时前
影响约 70% 网站:OpenAI 牵头协调全球发现/修复 PHP 高危漏洞
php·openai·ai编程
fengci.5 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
苏琢玉6 小时前
PHP 这次是真的火了,只不过火得有点吓人
php
小白跃升坊8 小时前
PHP2Shell:AI 两天挖出 9.2 分漏洞,让全球 70% 网站连夜打补丁
php·1panel·ai安全·漏洞披露
骑着蜗牛撵大象3279 小时前
字节序、TLV 到 netlink:Linux 网络消息的编解码全链路
linux·网络·php·etl·序列化·字节序·tlv