Laravel中利用隊列發送郵件的方法示例

      網友投稿 1059 2025-03-31

      https://www.jb51.net/article/121647.htm


      本文主要給大家介紹了關于Laravel中隊列發送郵件的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

      批量處理任務的場景在我們開發中是經常使用的,比如郵件群發,消息通知,短信,秒殺等等,我們需要將這個耗時的操作放在隊列中來處理,從而大幅度縮短Web請求和相應的時間。下面講解下Laravel中隊列的使用

      1、配置文件 config/queue.php

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      return [

      'default' => env( 'QUEUE_DRIVER' , 'sync' ),

      'connections' => [

      'sync' => [

      'driver' => 'sync' ,

      ],

      'database' => [

      'driver' => 'database' ,

      'table' => 'jobs' ,

      'queue' => 'default' ,

      'retry_after' => 90,

      ],

      'beanstalkd' => [

      'driver' => 'beanstalkd' ,

      'host' => 'localhost' ,

      'queue' => 'default' ,

      'retry_after' => 90,

      ],

      'sqs' => [

      'driver' => 'sqs' ,

      'key' => 'your-public-key' ,

      'secret' => 'your-secret-key' ,

      'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id' ,

      'queue' => 'your-queue-name' ,

      'region' => 'us-east-1' ,

      ],

      'redis' => [

      'driver' => 'redis' ,

      'connection' => 'default' ,

      'queue' => 'default' ,

      'retry_after' => 90,

      ],

      ],

      'failed' => [

      'database' => env( 'DB_CONNECTION' , 'mysql' ),

      'table' => 'failed_jobs' ,

      ],

      ];

      配置文件默認使用的是同步驅動sync,每一種隊列驅動的配置都可以在該文件中找到, 包括數據庫, Beanstalkd, Amazon SQS, Redis。 其中還包含了一個null隊列驅動用于那些放棄隊列的任務。failed配置項用于配置失敗隊列任務存放的數據庫及數據表。 接下來我們需要創建一個隊列任務類。具體配置可以參考文檔 隊列驅動配置

      2、創建隊列任務類,之后會在app/Jobs目錄下生成一個SendEmail.php的文件

      ?

      1

      php artisan make:job SendEmail

      ?

      1

      2

      3

      4

      5

      6

      Laravel中利用隊列發送郵件的方法示例

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      namespace App\Jobs;

      use App\User;

      use Illuminate\Bus\Queueable;

      use Illuminate\Queue\SerializesModels;

      use Illuminate\Queue\InteractsWithQueue;

      use Illuminate\Contracts\Queue\ShouldQueue;

      use Illuminate\Foundation\Bus\Dispatchable;

      use Illuminate\Support\Facades\Mail;

      class SendEmail implements ShouldQueue

      {

      use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

      protected $user ;

      /**

      * Create a new job instance.

      *

      * @return void

      */

      public function __construct(User $user )

      {

      $this ->user = $user ;

      }

      /**

      * 執行隊列的方法 比如發送郵件

      *

      * @return void

      */

      public function handle()

      {

      $user = $this ->user;

      Mail::raw( '這里填寫郵件的內容' , function ( $message ){

      // 發件人(你自己的郵箱和名稱)

      $message ->from( 'your_email@163.com' , 'yourname' );

      // 收件人的郵箱地址

      $message ->to( $this ->user);

      // 郵件主題

      $message ->subject( '隊列發送郵件' );

      });

      }

      }

      任務類創建完之后到控制器 把數據加入到隊列

      3、創建發送消息的控制器 使用dispatch方法手動分發任務,方法里傳一個任務類的實例

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      namespace App\Http\Controllers;

      use App\Jobs\SendEmail;

      use App\User;

      class MessageController extends Controller

      {

      public function index()

      {

      $user = User::find(1);

      $this ->dispatch( new SendEmail( $user ));

      }

      }

      4、然后訪問瀏覽器,運行項目把任務推送到隊列中。然后使用Artisan命令,執行隊列里的任務

      php artisan queue:

      queue:work 默認只執行一次隊列請求, 當請求執行完成后就終止;

      queue:listen 監聽隊列請求,只要運行著,就能一直接受請求,除非手動終止;

      queue:work --daemon同listen一樣,不同的是work不需要再次加載框架,直接運行任務,一般推薦使用這個來處理隊列監聽。

      注:使用 queue:work --daemon ,當更新代碼的時候,需要停止,然后重新啟動,這樣才能把修改的代碼應用上。

      總結

      以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

      出現問題去failed_jobs表中查看信息

      Laravel

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:更改任意多邊形或曲線的形狀
      下一篇:一張圖帶你了解華為云WeLink高效辦公的秘密
      相關文章
      亚洲色爱图小说专区| 亚洲人成网网址在线看| 亚洲伦理一区二区| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲国产成人影院播放| 亚洲a∨无码精品色午夜| 亚洲精品国产高清在线观看| 亚洲色精品三区二区一区| 亚洲综合精品第一页| 最新国产成人亚洲精品影院| 亚洲另类春色国产精品| 亚洲一卡2卡4卡5卡6卡在线99| 亚洲人成在线影院| 亚洲色图.com| 亚洲日本国产精华液| 亚洲免费在线视频观看| 久久精品国产亚洲AV忘忧草18| 亚洲中文无码av永久| 亚洲av产在线精品亚洲第一站| 亚洲av午夜精品无码专区| 亚洲综合一区二区三区四区五区| 亚洲乱码一区二区三区国产精品| 亚洲一线产区二线产区区| 亚洲成av人片在www鸭子| 国产亚洲视频在线观看| 亚洲精品无码久久久久AV麻豆| 亚洲性日韩精品国产一区二区| 久久亚洲AV永久无码精品| 国产亚洲成av人片在线观看| 亚洲av无码不卡一区二区三区| 久久丫精品国产亚洲av不卡| 亚洲国产成人精品无码区在线秒播| 亚洲一区在线观看视频| 亚洲精品女同中文字幕| 国产亚洲情侣久久精品| 国产亚洲av片在线观看18女人| 亚洲伊人色欲综合网| 亚洲宅男永久在线| 国产亚洲精品VA片在线播放| 色欲aⅴ亚洲情无码AV| 中文字幕人成人乱码亚洲电影|