• laravel框架 - 消息队列如何使用


    业务场景:项目里边有很多视频资源需要上传到抖音资源库,通过队列一条一条上传。

    参考实例:发送邮件,仅供参考

    (1)创建任务【生成任务类】
    在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。你可以用以下的 Artisan 命令来生成一个新的队列任务

    php artisan make:job DyUploadResource

    任务类结构
    任务类的结构很简单,一般来说只会包含一个让队列用来调用此任务的 handle 方法,定义需要执行的任务逻辑,如发送邮件等

    1. namespace App\Jobs;
    2. use App\Models\HtQuestLibraryQuest;
    3. use Illuminate\Bus\Queueable;
    4. use Illuminate\Contracts\Queue\ShouldQueue;
    5. use Illuminate\Foundation\Bus\Dispatchable;
    6. use Illuminate\Queue\InteractsWithQueue;
    7. class DyUploadResource implements ShouldQueue
    8. {
    9. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    10. /**
    11. * 任务最大尝试次数。
    12. *
    13. * @var int
    14. */
    15. public $tries = 5;
    16. /**
    17. * 任务失败前允许的最大异常数
    18. *
    19. * @var int
    20. */
    21. public $maxExceptions = 3;
    22. /**
    23. * 任务运行的超时时间。
    24. *
    25. * @var int
    26. */
    27. public $timeout = 600;
    28. /**
    29. * 课程信息
    30. *
    31. * @var int
    32. */
    33. public $product_data;
    34. /**
    35. * 抖音资源上传
    36. *
    37. * @return void
    38. */
    39. public function __construct(array $product_data)
    40. {
    41. $this->product_data = $product_data;
    42. if(empty($product_data)){
    43. exit();
    44. }
    45. }
    46. /**
    47. * Execute the job.
    48. * 里边写代码逻辑
    49. * @return bool
    50. */
    51. public function handle(): bool
    52. {
    53. }
    54. }

    (2)分发任务【如何使用】

    1. namespace App\Http\Controllers;
    2. use App\Jobs\ProcessPodcast;
    3. use Illuminate\Http\Request;
    4. use App\Http\Controllers\Controller;
    5. class PodcastController extends Controller
    6. {
    7. /**
    8. * 抖音资源课程上传
    9. */
    10. public function dyUploadResource(Request $request)
    11. {
    12. // dispatch 用于分发,onQueue 用户起名,监听使用
    13. // ->delay(Carbon::now()->addMinutes(10)) 延迟分发
    14. DyUploadResourceMiddle::dispatch($product_data)->onQueue('dy_resource_get_status');
    15. }
    16. }

    (3)监听队列

    php artisan queue:work --queue=dy_resource_get_status

    开启后队列会执行redis已入队的值

    redis队列任务:

  • 相关阅读:
    【LeetCode高频SQL50题-基础版】打卡第8天:第41~45题
    Oracle中序列
    Mac环境部署单机版Hbase及使用JavaAPI对Hbase增删改查
    聚沙成塔【45天玩转uni-app】初探uni-app
    研究生写脚本抢HPV九价疫苗:被采取强制措施,后果严重
    嵌入式软件工程师面试题——2025校招社招通用(十一)
    Django框架之路由层
    CTP:关于cc和bindgen库及rust工程组织
    linux elf 格式详解
    golang Context应用举例
  • 原文地址:https://blog.csdn.net/qq_20869933/article/details/132985419