环境

thinkphp5.1redis"topthink/think-queue": "2.0.*"复制代码

queue 配置环境 config/queue.php

<?php // +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]// +----------------------------------------------------------------------// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------return [//    'connector' => 'Sync'

    //Redis驱动    'connector' => 'redis',    "expire" => 60,//任务过期时间默认为秒,禁用为null    "default" => "default",//默认队列名称    "host" => Env::get("redis.host", "127.0.0.1"),//Redis主机IP地址    "port" => Env::get("redis.port", 6379),//Redis端口    "password" => Env::get("redis.password", "123456"),//Redis密码    "select" => 5,//Redis数据库索引    "timeout" => 0,//Redis连接超时时间    "persistent" => false,//是否长连接

];

复制代码

生产者

<?php /** * Created by. * User: Jim * Date: 2020/11/14 * Time: 10:25 */namespace app\index\controller;use think\Controller;use think\Queue;/** * 发布一个任务 * Class JobTest * @package app\index\controller */class Index extends Controller{public function index()    {//   当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法        $jobHandlerClassName = 'app\index\job\Email';// 2.当前任务归属的队列名称,如果为新队列,会自动创建        $jobQueueName = "userRegisterEmailNoticeQueue1";// 3.当前任务所需的业务数据 . 不能为 resource 类型,其他类型最终将转化为json形式的字符串        $jobData = ['create_time'=>time(),'queue_name'=>$jobQueueName,'task_type'=>$jobHandlerClassName,'data'=>'data',        ];// 4.将该任务推送到消息队列,等待对应的消费者去执行        $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);if ($isPushed !== false) {echo date('Y-m-d H:i:s') . "用户注册邮箱通知加入队列成功" . "";        } else {echo '用户注册邮箱通知加入队列失败.';        }    }}复制代码

消费者

<?php /** * Created by. * User: Jim * Date: 2020/11/14 * Time: 10:32 */namespace app\index\job;use think\Db;use think\queue\Job;class Email{public function fire(Job $job, $data)    {        $isJobDone = $this->JobDone($data);if ($isJobDone) {// 如果任务执行成功, 记得删除任务            $job->delete();print("-------------------".date('Y-m-d H:i:s',$data['create_time'])."-邮件已发送成功,已经删除这个队列了-------------------" . PHP_EOL);        } else {if ($job->attempts() > 3) {//通过这个方法可以检查这个任务已经重试了几次了print("Hello Job has been retried more than 3 times!" . "\n");                $job->delete();// 也可以重新发布这个任务//print("Hello Job will be availabe again after 2s."."\n");//$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行            }        }    }/**     * 根据消息中的数据进行实际的业务处理...     */private function JobDone($data)    {/**         * 执行邮件通知         *         */        sleep(1);        Db::name('queue')->insert($data);return true;    }}复制代码

使用

访问http://www.tp5.cc/ (本地虚拟主机) 创建一个队列(生产者)

进入项目目录cd queue  

执行(可以使用定时任务)(消费者)php think queue:work --daemon --queue userRegisterEmailNoticeQueue1

End

来源:https://juejin.cn/post/6894824585766961166

apache license 2.0如何使用防止法律纠纷_Thinkphp + queue 使用队列进行 邮件通知相关推荐

  1. apache license 2.0如何使用防止法律纠纷_go语言使用Swaggo详细教程

    相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至能让前后端人员打起来 ...

  2. Apache License 2.0: 原文(英文/中文)

    将Apache License 2.0的内容搬运于此,便于查阅. Apache License 2.0(英文) License正文 Apache License Version 2.0, Januar ...

  3. 开源许可违反:案例说明(Apache License 2.0)

    Apache License 2.0是一种对商业非常友好的开源许可证,但是即使如此还是会发生一些使用上违反的示例,这篇文章通过一个具体的示例来进行说明. 案例 2020年6月份,Apache顶级项目的 ...

  4. Github如何添加合适的开源License(Apache License 2.0、MIT License、GPL3)

    本文为作者学习开源许可的笔记 欢迎交流讨论,喜欢的话点个赞吧 欢迎去看我的主页: NicholasYe's Hompage. 1.如何添加一个开源License 在github自己的项目界面中点击Ad ...

  5. Apache License 2.0介绍

    Apache License 2.0介绍 Apache LicenseVersion 2.0, January 2004http://www.apache.org/licenses/TERMS AND ...

  6. 开源协议:在项目中使用Apache License 2.0

    Apache License 2.0的使用限制有很多介绍,这篇文章说明一下在项目中使用Apache License 2.0的步骤和注意事项. 最常见的理解误区 在项目的根目录下,创建一个LISENCE ...

  7. java license 开源_MinIO:一个基于Apache License v2.0开源协议的对象存储服务

    MinIO Quickstart Guide--快速入门 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构 ...

  8. Apache LICENSE 2.0 授权介绍

    当我们使用github或者其它地方的开源项目时候,需要注意开源项目的授权协议.开源不等于免费使用,如果公司使用开源项目时候违反其开源协议,有可能给公司或者个人带来版权纠纷.使用时候需要慎重阅读开源代码 ...

  9. Apache License Version 2.0 (Apache 2.0 开源协议)

    Apache 2.0 开源协议的核心内容是以保护和尊重原作者的著作权为主要目的.对使用,复制,修改,商用不做过多限制,但必须包含原著的License信息. 公司或项目在使用 Apache Licens ...

最新文章

  1. 《Cacti实战》——第1章 认识Cacti
  2. java html 字符串截取字符串长度_Java截取带html标签的字符串,再把标签补全(保证页面显示效果)...
  3. 《Redis 设计与实现》读书笔记-Redis 对象
  4. 教学思路SQL之入门习题《学生成绩》 二、基础单表查询
  5. [Leedcode][JAVA][第572题][另一个树的子树]
  6. 使用软链接的方式迁移Docker
  7. bootstrap 输入错误提示_win7系统提示explorer.exe应用程序错误怎么办
  8. 2.图像作为函数 | 初探数字图像_3
  9. k8s、jenkins集成
  10. 管理科学の学生自学CS的【计划】与【心得】
  11. 使用FlashBoot3.2c 将 U 盘制作成 DOS 启动盘
  12. 电力猫服务器的网页,电力猫方案完美解决家庭网络布局
  13. python根据身高计算标准体重_有谁知道如何根据身高计算标准体重
  14. google统计产品
  15. 刚申请的博客,就发一个老师让做的“一分钟打动面试官”作业做为纪念吧!!!...
  16. Android仿QQ微信开场导航以及登陆界面
  17. linux查询iscsi服务,使用Linux的tgtd提供iscsi服务
  18. java中接口可以继承接口吗?
  19. Cytoscape.js – 用于数据分析和可视化的交互图形库
  20. PHP数组去重/高德地图API

热门文章

  1. postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
  2. nginx文件系统大小_详解Nginx系列
  3. python爬虫之逆向破解_Python爬虫进阶之APP逆向(二)
  4. oracle分组后伪列,Oracle伪列和伪表和分组函数(row_number,Rank)
  5. vsftpd设置被动模式_(1)vsftpd主、被动模式iptables配置方法
  6. MySQL 服务无法启动--服务没有报告任何错误 ---Failed to find valid data directory.
  7. 爱奇艺怎么开启数据流量自动播放
  8. IE浏览器高级设置如何还原
  9. 爱奇艺视频如何联系客服?爱奇艺联系客服攻略
  10. 学习Spring Boot:(十一) 自定义装配参数