zoukankan      html  css  js  c++  java
  • 消息队列queue

    前言 

      最近在做一个项目,做项目的过程中遇到了要使用queue的场景,芳哥跟我说,这个你可以用队列来实现。我想了想,嗯?队列,队列不就是先进先出的哪一种吗?后来翻看laravel文档发现,原来queue并不是我所想的数据结构的队列,而是另外一种东西。

    正文

    1. 为什么要用queue?

      比如有大量的请求一下发过来,服务器来不及处理,而用户急需回应,这个时候你就需要先给用户回应,然后慢慢的去处理这些请求。在这个项目中,因为涉及到文件上传,如果单线程执行的话,系统资源没有充分被利用,而且刷新目录的时候,要等文件上传完才会出现完整的目录结构,对于用户来说体验不是很友好,所以就使用queue来处理了。

    2. 怎么使用queue?

      队列的思想就是先把待执行的任务存下来,然后你再启用服务,去执行这些队列里的任务。

      (1)连接

         所谓的连接就是你把这些任务存在哪里,一般可以存在数据库中,redis中。

         config/queue.php 配置文件里,有一个 connections 配置选项。这个选项给 Amazon SQS,Beanstalk,或者 Redis 这样的后端服务定义了一个特有的连接。不管是哪一种,一个给定的连接可能会有多个 「队列」,而 「队列」 可以被认为是不同的栈或者大量的队列任务。

       queue 配置文件中每个连接的配置示例中都包含一个 queue 属性。这是默认队列任务被发给指定连接的时候会被分发到这个队列中。换句话说,如果你分发任务的时候没有显式定义队列,那么它就会被放到连接配置中 queue 属性所定义的队列中:

    // 这个任务将被分发到默认队列...
    Job::dispatch();
    
    // 这个任务将被发送到「emails」队列...
    Job::dispatch()->onQueue('emails');

    设置超时时间:
    <?php
    
    namespace AppJobs;
    
    class ProcessPodcast implements ShouldQueue
    {
        /**
         * 任务运行的超时时间。
         *
         * @var int
         */
        public $timeout = 120;
    }

      指定队列:

    php artisan queue:work redis --queue=emails

    如果你想多线程的话,可以多起几个。

     

      

        

  • 相关阅读:
    OD调试1--第一个win32程序
    Koa与Node.js开发实战(1)——Koa安装搭建(视频演示)
    《11招玩转网络安全》之第五招:DVWA命令注入
    《11招玩转网络安全》之第四招:low级别的DVWA SQL注入
    一张图11招学会Python网络黑客
    《11招玩转网络安全》之第三招:Web暴力破解-Low级别
    《11招玩转网络安全》之第二招:漏洞扫描
    《11招玩转网络安全》之第一招:Docker For Docker
    11招玩转黑客攻防——用Python,更安全
    如何有效的练习并且提升写代码的能力?
  • 原文地址:https://www.cnblogs.com/cjjjj/p/9736192.html
Copyright © 2011-2022 走看看