<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 一些小技巧 1. 在開發環境我們想測試的時候,可以把 Queue driver 設置成為 sync,這樣隊列就變成了同步執行,方便調試隊列里面的任務。 2. Job 里面的 handle 方法是可以注入別的 class 的,就像在 Controller action 里面也可以注入一樣。 問答 # 問:什么時候使用 queue:listen 什么時候使用 queue:work? 答:Laravel 5.3 的文檔已經不寫 queue:listen這個指令怎么用了,所以你可以看出來可能官方已經不怎么建議使用 queue:listen了,但是在本地調試的時候要使用 queue:listen,因為 queue:work在啟動后,代碼修改,queue:work不會再 Load 上下文,但是 queue:listen仍然會重新 Load 新代碼。 其余情況全部使用 queue:work吧,因為效率更高。 # 命令講解 以下是常用的指令,我講解一下 ~~~ php artisan queue:work --daemon --quiet --queue=default --delay=3 --sleep=3 --tries=3 ~~~ --daemon > The queue:work Artisan command includes a —daemon option for forcing the queue worker to continue processing jobs without ever re-booting the framework. This results in a significant reduction of CPU usage when compared to the queue:listen command 總體來說,在 supervisor 中一般要加這個 option,可以節省 CPU 使用。 --quiet > 不輸出任何內容 --delay=3 > 一個任務失敗后,延遲多長時間后再重試,單位是秒。這個值的設定我個人建議不要太短,因為一個任務失敗(比如網絡原因),重試時間太短可能會出現連續失敗的情況。 --sleep=3 > 去 Redis 中拿任務的時候,發現沒有任務,休息多長時間,單位是秒。這個值的設定要看你的任務是否緊急,如果是那種非常緊急的任務,不能等待太長時間。 --tries=3 > 定義失敗任務最多重試次數。這個值的設定根據任務的重要程度來確定,一般 3 次比較適合。 # Redis 中發生了什么事情 ~~~ dispatch(new ExampleJob()); ~~~ 如果一個任務進入 default 隊列,會發生: ~~~ 127.0.0.1:6379>monitor "RPUSH" "queues:default" "{\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"data\":{\"commandName\":\"App\\\\Jobs\\\\ExampleJob\",\"command\":\"O:19:\\\"App\\\\Jobs\\\\ExampleJob\\\":7:{s:17:\\\"\\u0000*\\u0000userIdentifier\\\";N;s:9:\\\"\\u0000*\\u0000realIp\\\";N;s:12:\\\"\\u0000*\\u0000requestId\\\";N;s:6:\\\"\\u0000*\\u0000job\\\";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:5:\\\"delay\\\";N;}\"},\"id\":\"bwA7ICPqnjYiM0ErjRBNwn0kVWF6KeAs\",\"attempts\":1}" ~~~ redis 中會出現如下內容: ~~~ 127.0.0.1:6379> keys queue* 1) "queues:default" ~~~ 如果執行命令: ~~~ php artisan queue:work --daemon --quiet --queue=default --delay=3 --sleep=3 --tries=3 ~~~ # Redis 會發生什么事情? 第一步:查看是否需要重啟,如果 laravel:illuminate:queue:restart 存在,就重啟隊列(代碼更新后,一定要重啟隊列,否則隊列不會讀取最新代碼)。 ~~~ "GET" "laravel:illuminate:queue:restart" ~~~ 第二步:查看zset queues:default:delayed ,注意這里的事務 ~~~ "WATCH" "queues:default:delayed" "ZRANGEBYSCORE" "queues:default:delayed" "-inf" "1485386782" "UNWATCH" ~~~ 第三步:查看 zset queues:default:reserved,注意這里的事務 ~~~ "WATCH" "queues:default:reserved" "ZRANGEBYSCORE" "queues:default:reserved" "-inf" "1485386782" "UNWATCH" ~~~ 第四步:從 queue:default list 中取任務,如果有任務,要把任務先暫存到 queues:default:reserved 中(過期時間60秒,Redis Queue 里面寫一個任務最多執行60秒)。 任務執行結束會把 queues:default:reserved 中的任務刪除,如果任務報錯(Throw exception),也會把queues:default:reserved 中的任務刪除,然后把任務扔進 queues:default:delay,delay 的秒數是 3 秒(因為我們上面參數配置的是 --delay=3)。 ~~~ "LPOP" "queues:default" #取出任務后,先要放到 queues:default:reserved zset 中 "ZADD" "queues:default:reserved" "1485386842" "{\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"data\":{\"commandName\":\"App\\\\Jobs\\\\ExampleJob\",\"command\":\"O:19:\\\"App\\\\Jobs\\\\ExampleJob\\\":7:{s:17:\\\"\\u0000*\\u0000userIdentifier\\\";N;s:9:\\\"\\u0000*\\u0000realIp\\\";N;s:12:\\\"\\u0000*\\u0000requestId\\\";N;s:6:\\\"\\u0000*\\u0000job\\\";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:5:\\\"delay\\\";N;}\"},\"id\":\"bwA7ICPqnjYiM0ErjRBNwn0kVWF6KeAs\",\"attempts\":1}" # 任務執行完畢后, 從 queues:default:reserved zset 中刪除 "ZREM" "queues:default:reserved" "{\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"data\":{\"commandName\":\"App\\\\Jobs\\\\ExampleJob\",\"command\":\"O:19:\\\"App\\\\Jobs\\\\ExampleJob\\\":7:{s:17:\\\"\\u0000*\\u0000userIdentifier\\\";N;s:9:\\\"\\u0000*\\u0000realIp\\\";N;s:12:\\\"\\u0000*\\u0000requestId\\\";N;s:6:\\\"\\u0000*\\u0000job\\\";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:5:\\\"delay\\\";N;}\"},\"id\":\"bwA7ICPqnjYiM0ErjRBNwn0kVWF6KeAs\",\"attempts\":1}" # 如果任務失敗,會放到 queue:default:delay zset 中 "ZADD" "queues:default:delayed" "1485386783" "{\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"data\":{\"commandName\":\"App\\\\Jobs\\\\ExampleJob\",\"command\":\"O:19:\\\"App\\\\Jobs\\\\ExampleJob\\\":7:{s:17:\\\"\\u0000*\\u0000userIdentifier\\\";N;s:9:\\\"\\u0000*\\u0000realIp\\\";N;s:12:\\\"\\u0000*\\u0000requestId\\\";N;s:6:\\\"\\u0000*\\u0000job\\\";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:5:\\\"delay\\\";N;}\"},\"id\":\"uuPBCq4QE9ocnw8UbkLhUl2Lh07yPm6M\",\"attempts\":1}" ~~~ # Redis 中的數據結構和操作: 1. queue:default 數據結構: List, 操作: LRANGE "queues:default" 0 -1 獲取 List 里面的所有數據。 2. queue:default:reserved 和 queue:default:delay 數據結構: Zset,時間是 zset 的 score,通過 score 來排序。 操作: ZRANGE ”queues:default:reserved“ 0 -1 獲取 zset 里面的所有數據。 ZRANGEBYSCORE queues:default:reserved -inf +inf 通過時間來排序獲取所有數據。 # 注意 Redis 里面一個任務默認最多執行60秒,如果一個任務60秒沒有執行完畢,會繼續放回到隊列中,循環執行,那酸爽
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看