群控系统服务端开发模式-应用开发-自动退出发送邮件

一、修改Redis配置文件

        将redis.conf里面的notify-keyspace-events参数对应的值改为Ex,具体代码如下:

notify-keyspace-events Ex

二、创建控制台命令

        在根目录下config文件夹下找到console.php文件修改,具体代码如下:

<?php
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
    // 指令定义
    'commands' => [
        'redisClusterControlApiExpireToken' => 'app\command\ExpireToken',
    ],
];

三、创建数据库Redis配置文件

        在根目录下config文件夹下创建rabbitmq.php,输入如下代码:

<?php
/**
 * rabbitmq配置文件
 * User: 龙哥·三年风水
 * Date: 2024/12/11
 * Time: 14:47
 */
return [
    'is_formal' =>  '1',//正式环境时修改为0,测试环境时修改为1
    'redis' => [
        [
            'host'     => "192.168.0.157",
            'port'     => 6379,
            'password' => "QXtr@@PxjoLenGon",
            'select' => 126,
            'temporary' => 125
        ],
        [
            'host'     => "172.20.36.144",
            'port'     => 6379,
            'password' => "QXtr@@PxjoLenGon",
            'select' => 126,
            'temporary' => 124
        ]
    ],
    'mysql' => [
        [
            'host'     => "192.168.0.161",
            'port'     => "3306",
            'user'     => "bjhy_base",
            'password' => "jZ9e@F52V%pZ6RqP",
            'dbname'    => "sl_haoyou_base"
        ],
        [
            'host'     => "172.20.36.143",
            'port'     => "3306",
            'user'     => "cluster_control",
            'password' => "7%Qh3ar@TiA5Rt#gNPT",
            'dbname'    => "cluster_control"
        ]
    ],
];

四、创建命令文件

        在根目录下app文件夹下创建command文件夹,创建控制台命令文件并命名ExpireToken,代码如下:

<?php
/**
 * 过期清理token命令
 * User: 龙哥·三年风水
 * Date: 2024/11/13
 * Time: 10:15
 */
namespace app\command;
use PHPMailer\PHPMailer\PHPMailer;
use think\console\Command;
use think\console\Input;
use think\console\Output;
class ExpireToken extends Command
{
    protected function configure(){
        // 指令配置
        $this->setName('redisClusterControlApiExpireToken')->setDescription('the redisClusterControlApiExpireToken command');
    }

    protected function execute(Input $input, Output $output){
        $isFormal = config('rabbitmq.is_formal');
        //获取配置文件
        $redisConfig = config("rabbitmq.redis.{$isFormal}");
        $redis = new \Redis();
        $redis->connect($redisConfig['host'],$redisConfig['port']);
        $redis->auth($redisConfig['password']);
        $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
        $redis->psubscribe(array("__keyevent@{$redisConfig['select']}__:expired"), function ($redis, $pattern, $channel, $msg){
            $res = explode('_', $msg);
            if(count($res) == 2){
                $expireTime = time();
                $isFormal = config('rabbitmq.is_formal');
                $mysqlConfig = config("rabbitmq.mysql.{$isFormal}");
                $dbconnect = new \PDO("mysql:host={$mysqlConfig['host']};dbname={$mysqlConfig['dbname']}", $mysqlConfig['user'], $mysqlConfig['password']);
                if(!is_numeric($res[1])){//修改token退出时间
                    $sqlTokenUpdate = "Update nc_permission_token SET expire_time = {$expireTime} WHERE token = '{$res[1]}'";
                    $dbconnect->exec($sqlTokenUpdate);
                }
                if(is_numeric($res[1])){//向对应的管理员发送电子邮件
                    $sqlAdminFind = "SELECT `realname`,`email` FROM nc_permission_admin WHERE id = '{$res[1]}'";
                    $retAdminData =  $dbconnect->query($sqlAdminFind)->fetch();
                    if(!empty($retAdminData)){
                        $sqlMailFind = "SELECT `username`,`account`,`smtp_address`,`smtp_port`,`smtp_password`,`smtp_protocol` FROM nc_param_mail WHERE id = 1";
                        $retMailData =  $dbconnect->query($sqlMailFind)->fetch();
                        $expireDateTime = date("Y-m-d H:i:s",$expireTime);
                        $emailContent = $retAdminData['realname'].'于'.$expireDateTime.'自动退出系统';
                        $phpMailer = new PHPMailer(true);
                        $phpMailer->isSMTP();// 使用SMTP服务
                        $phpMailer->CharSet = 'utf8';// 编码格式为utf8,不设置编码的话,中文会出现乱码
                        $phpMailer->Host = $retMailData['smtp_address'];// 发送人的SMTP服务器地址
                        $phpMailer->SMTPAuth = true;// 是否使用身份验证
                        $phpMailer->Username = $retMailData['account'];// SMTP账号
                        $phpMailer->Password = $retMailData['smtp_password'];// SMTP密码
                        $phpMailer->SMTPSecure = $retMailData['smtp_protocol'];// 使用ssl协议方式
                        $phpMailer->Port = $retMailData['smtp_port'];// ssl协议方式端口号是465
                        $phpMailer->setFrom($retMailData['account'],$retMailData['username']);// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为
                        $phpMailer->addAddress($retAdminData['email'],'自动退出系统');// 设置收件人信息,如邮件格式说明中的收件人
                        $phpMailer->isHTML(true);
                        $phpMailer->Subject = '自动退出系统';
                        $phpMailer->Body = $emailContent;
                        $phpMailer->send();
                        if(!empty($phpMailer->ErrorInfo)){
                            file_put_contents('redis_cluster_control_api_expire_token.txt', json_encode($phpMailer->ErrorInfo) . PHP_EOL, FILE_APPEND);
                        }
                    }
                }
            }
        });
    }
}

五、在环境里面执行命令

php think redisClusterControlApiExpireToken &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端篇 -- jQuery详细教程

jQuery教程 jQuery官网1.1 jQuery的基本介绍1.2 jQuery 基本开发步骤1.3 jQuery对象和DOM对象 1.3.1 jQuery对象的基本介绍1.3.2 DOM对象转 jQuery对象1.3.3 jQuery对象转DOM对象 1.4 jQuery选择器 1.4.1 jQuery 基本选择器介绍1.4.2 基本选择器1.4.3 层次选择器1.4.4 基础过滤…

【数模学习笔记】模糊综合评价

声明&#xff1a;以下笔记中的图片均来自“数学建模学习交流”清风老师的课程ppt&#xff0c;仅用作学习交流使用 模糊综合评价 文章目录 模糊综合评价模糊数学经典集合和模糊集合的基本概念经典集合和特征函数模糊集合和隶属函数模糊集合的分类 隶属函数的确定方法方法一 模糊…

STM32F103单片机使用STM32CubeMX新建IAR工程步骤

打开STM32CubeMX软件&#xff0c;选择File 选择新建工程 在打开的窗口输入单片机型号 在右下角选择单片机型号&#xff0c;然后点右上角 start project&#xff0c;开始新建工程。 接下来设置调试接口&#xff0c;在左边System Core中选择 SYS&#xff0c;然后在右右边debu…

相机(Camera)硬件组成详解

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 写在前面&#xff1a;可以去B站观看一些相机原理的视频来配合学习&#xff0c;这里推荐&#xff1a;推荐1&#xff0c;推荐2&#xff0c;推荐3 相机&#xff08;Camera&#xff09;是一种复杂的光…

String【Redis对象篇】

&#x1f3c6; 作者简介&#xff1a;席万里 ⚡ 个人网站&#xff1a; 文章目录 String1.String是什么&#xff1f;2.String怎么用&#xff1f;3.常用操作4.底层实现&#xff1f;5.总结&#xff08;重点&#xff09; String 1.String是什么&#xff1f; String就是字符串&…

乘上 SpringBoot 东风,广场舞团掀起律动热潮

2 系统开发环境 2.1 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#xff0c;所以Java的发展迅速。…

组件开发的环境准备

目录​​​​​​​ node.js的安装 npm镜像源的修改 pnpm包管理器的安装&#xff08;全局安装&#xff09; 基于pnpm创建脚手架项目 node.js的安装 Node.js 是一个开源的、跨平台的 JavaScript 运行环境&#xff0c;能够在服务器端执行 JavaScript 代码。 a.下载与安装 …

【OpenCV】Canny边缘检测

理论 Canny 边缘检测是一种流行的边缘检测算法。它是由 John F. Canny 在 1986 年提出。 这是一个多阶段算法&#xff0c;我们将介绍算法的每一个步骤。 降噪 由于边缘检测易受图像中的噪声影响&#xff0c;因此第一步是使用 5x5 高斯滤波器去除图像中的噪声。我们在前面的章…

gitee常见命令

目录 1.本地分支重命名 2.更新远程仓库分支 3.为当前分支设置远程跟踪分支 4.撤销已经push远程的代码 5.idea->gitee的‘还原提交’ 需要和本地当前的代码解决冲突 解决冲突 本地工作区的差异代码显示 本地commit和push远程 6.idea->gitee的‘将当前分支重置到此…

Ultra-Fast-Lane-Detection复现、部署及训练

Ultra-Fast-Lane-Detection复现、训练及部署 一、复现二、训练三、部署 一、复现 Github下载源码&#xff1a;https://github.com/cfzd/Ultra-Fast-Lane-Detection &#xff08;1&#xff09;将GPU运算改为CPU运算&#xff1a;.cuda() -> .to(‘cpu’) test.py中33行&…

【Java计算机毕业设计】基于SSM+VUE宠物领养管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

工业异常检测-CVPR2024-新的3D异常数据合成办法和自监督网络IMRNet

论文&#xff1a;https://arxiv.org/pdf/2311.14897v3.pdf 项目&#xff1a;https://github.com/chopper-233/anomaly-shapenet 这篇论文主要关注的是3D异常检测和定位&#xff0c;这是一个在工业质量检查中至关重要的任务。作者们提出了一种新的方法来合成3D异常数据&#x…

Linux-ubuntu环境配置

一&#xff0c;安装VWware&#xff0c;里面导入镜像文件 这些都是文件夹里面有的&#xff0c;然后对着正点原子视频安装就行&#xff0c;虚拟机的破解码&#xff0c;去百度搜一个能用就行&#xff0c;中间遇见俩问题。①乌班图里面不能上网&#xff0c;②插入U盘后&#xff0c;…

Python Selenium 各浏览器驱动下载与配置使用(详细流程)

大家好啊&#xff01;我是NiJiMingCheng 这是我的博客&#xff1a;NiJiMingCheng 这节课我们来学习安装selenium和对应的各个浏览器驱动&#xff0c;个人比较喜欢使用谷歌浏览器驱动&#xff0c;所以接下来以谷歌浏览器来为大家做示例&#xff01;&#xff01;&#xff01; Sel…

工具学习_Buildroot

0. 工具概述 Buildroot 是一个简单、高效且易于使用的工具&#xff0c;旨在通过交叉编译生成嵌入式 Linux 系统。它支持生成交叉编译工具链、根文件系统、内核镜像以及引导加载器。通过类似于内核配置的菜单界面&#xff08;menuconfig、gconfig、xconfig&#xff09;&#xf…

【机器人】系统辨识之激励轨迹设计(傅里叶级数)

在机器人参数辨识中使用傅里叶级数&#xff0c;主要是为了生成一种激励轨迹&#xff0c;具有良好的数学特性&#xff0c;同时符合物理要求。傅里叶级数的特性使其在机器人动力学辨识的激励轨迹设计中非常常用。 1. 为什么需要激励轨迹&#xff1f; 激励轨迹的作用是通过驱动机…

Unity简单操作及使用教程

Unity 是一款强大的跨平台游戏引擎&#xff0c;它不仅支持 2D 和 3D 游戏的开发&#xff0c;还可以用于虚拟现实 (VR)、增强现实 (AR)、动画、建筑可视化等多个领域。Unity 提供了完整的开发环境&#xff0c;具有丰富的功能、工具和资源&#xff0c;可以帮助开发者快速实现创意…

前端node环境安装:nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)

需求&#xff1a;在做前端开发的时候&#xff0c;有的时候 这个项目需要 node 14 那个项目需要 node 16&#xff0c;我们也不能卸载 安装 。这岂不是很麻烦。这个时候 就需要 一个工具 来管理我们的 node 版本和 npm 版本。 下面就分享一个 nvm 工具 用来管理 node 版本。 这个…

为什么数据平台需要敏捷版|直播回顾

11月28日&#xff0c;我们邀请到StartDT合伙人、CTO地雷和StartDT资深战略咨询专家何夕&#xff0c;围绕“为什么数据平台需要敏捷版”这个话题&#xff0c;向大家汇报了DataSimba敏捷版这半年来的最新进展&#xff0c;并带来了详细的产品解读。 敏捷版支持StarRocks、ClickHo…

HarmonyOS-中级(四)

文章目录 Native适配开发三方库的基本使用 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;HarmonyOS专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月09日11点12分 Native适配开发 Node-API HarmonyOS Node-API 是 HarmonyOS 提供的…