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

相关推荐
会Tk矩阵群控的小木5 小时前
云控系统在TikTok多账号管理中的核心应用与技术实现
开发语言·php·开源软件·个人开发·tk矩阵
傻啦嘿哟6 小时前
降低首字延迟(TTFB):专线节点与TCP Fast Open的配置
开发语言·php
介一安全6 小时前
【漏洞学习】PHP+Windows环境通用文件上传漏洞深度剖析
windows·web安全·php·文件上传·安全性测试
郝学胜-神的一滴12 小时前
系统设计 013:高并发系统缓存:从原理到实践全解析
java·开发语言·python·缓存·系统架构·php·软件构建
程序二次开发15 小时前
wordpress 文章页,文章分类,单页,woocommerc 产品页,分类页添加.html后缀
大数据·前端·html·php
qiuyepiaoling15 小时前
rabbitmq 基础
分布式·rabbitmq·ruby
phltxy15 小时前
RabbitMQ 事务与消息分发
分布式·rabbitmq
M1582276905515 小时前
工业级 CAN 转以太网网关|SG-CANET-210/410,打通 CAN 与以太网,工业通信无边界
单片机·嵌入式硬件·php
热爱Liunx的丘丘人16 小时前
搭建一个 Web + 数据库系统(Nginx+PHP+MySQL)
数据库·nginx·php
AC赳赳老秦16 小时前
OpenClaw多Agent分工协作:按工作模块拆分Agent,实现全流程自动化闭环
java·大数据·数据库·python·自动化·php·openclaw