当前位置: 首页 > news >正文

TP8 定时任务yzh52521/http-crontab 教程

官方文档:

https://www.thinkphp.cn/ext/36

源码仓:

http-crontab: 接口化秒级定时任务管理

GitHub - yuanzhihai/http-crontab: 接口化秒级定时任务管理

一、composer 安装

composer require yzh52521/http-crontab

二、启动yzh52521/http-crontab

一定要用composer来打来命令窗口

php think crontab start

三、在TP控制器中发起请求

发送GET、POST、PUT、DELETE等HTTP请求,在TP8的控制器中实现这些功能
HTTP客户端库,如Guzzle。如果之前没有安装,可以通过Composer安装:

要引入:

use GuzzleHttp\Client;

use think\facade\Config;

发起ping请求:

composer require guzzlehttp/guzzle
<?php
namespace app\admin\controller;
use think\facade\Config;
use GuzzleHttp\Client;/**
* @name 定时任务
* @author 峰神
* @date 2024-6-1
*/
class Crontab 
{public function index(){// 使用配置中的参数初始化Guzzle客户端$client = new Client(['base_uri' => config('crontab.base_url'),'timeout'  => 2.0,'headers' => ['key' => config('crontab.safe_key'), // 添加安全密钥到请求头部],]);// 定义任务详情$taskData = ['name'      => 'My New Cron Task','schedule'  => '* * * * *', // 每分钟执行一次'command'   => '/path/to/your/command', // 替换为实际的命令或控制器路由'arguments' => [], // 可选参数'times'     => 0, // 无限次执行];$method = 'GET';// 根据请求方法构造请求$uri = '/crontab/ping';$options = [];$taskData = [];if ('POST' === $method) {// 对于POST请求,我们需要在请求体中发送数据$options['json'] = $taskData;} elseif ('GET' === $method && !empty($taskData)) {// 对于GET请求,我们将数据附加到URL作为查询字符串$query = http_build_query($taskData);$uri .= '?' . $query;}try {// 发起请求$response = $client->request($method, $uri, $options);// 处理响应$responseBody = (string)$response->getBody();$arrayData = json_decode($responseBody, true);dump($arrayData);die;echo "Request response: " . $responseBody;} catch (\Exception $e) {echo "Error sending request: " . $e->getMessage();}}
}

打开/admin/crontab/index

返回:Request response: {"code":200,"data":"pong","msg":"\u4fe1\u606f\u8c03\u7528\u6210\u529f\uff01"}

成功

添加任务例子:

$client = new Client();// 发起POST请求$response = $client->post(config('crontab.base_url').''/crontab/add'', ['headers' => ['key' => Config::get('crontab.safe_key'),'Content-Type' => 'application/x-www-form-urlencoded',],'form_params' => $postData,//'timeout' => 10.0, // 设置请求超时时间(秒)]);// 处理响应$responseBody = (string)$response->getBody();$arrayData = json_decode($responseBody, true);

重点:'form_params' => $postData,  $postData=数组

日志

			//日志列表if(!empty($postData['id']) && $url=='/crontab/flow'){// 发起请求$response = $client->request('GET', config('crontab.base_url').$url,['query' => ['page' => $page,'limit' => $limit,'filter' => json_encode(['crontab_id' => $postData['id']]), // 注意:这里假设服务器端能正确解析JSON格式的查询参数],'headers' => ['key' => Config::get('crontab.safe_key'),]]);}else{//其它$response = $client->request('GET', config('crontab.base_url').$url,['headers' => ['key' => Config::get('crontab.safe_key'),]]);}

TP8中引用组件(暂时用不到)

use Fairy\HttpCrontab;

参考案例:

cshaptx4869/http-crontab - 码云 - 开源中国 (gitee.com)

yuanzh/http-crontab - 码云 - 开源中国 (gitee.com)

TP6代码安全

http-crontab:Workerman + ThinkPHP6 实现后台可视化定时任务管理

https://download.csdn.net/download/weixin_42157556/20696280

如果本地安装测试请注意:

1.环境:php7.3

2.

3.下载代码中缺少了vendor文件夹,需要重新生成,

用composer+PHP打开命名窗口

composer install

,启用服务:执行命令 php crontab.php (windows) 或 php crontab.php start (linux)

浏览正常

相关文章:

  • 前端 CSS 经典:水波进度样式
  • Windows取证分析 | 如何最大程度提升分析效率
  • 【MySQL】表的约束
  • 腾讯开源人像照片生成视频模型V-Express
  • 240520Scala笔记
  • MySQL之查询性能优化(十)
  • 19.删除链表的倒数第N个结点
  • 如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据
  • 【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数
  • 【Linux】进程(8):Linux真正是如何调度的
  • Gradio.NET:一个快速制作演示demo网页的利器
  • 鸿蒙开发接口数据管理:【@ohos.data.preferences (首选项)】
  • 在Windows中使用svn的命令行
  • 【ARFoundation自学04】AR Tracked Image 图像追踪识别
  • 基于安卓的虫害识别软件设计--(1)模型训练与可视化
  • AngularJS指令开发(1)——参数详解
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Leetcode 27 Remove Element
  • mysql innodb 索引使用指南
  • nodejs实现webservice问题总结
  • npx命令介绍
  • Vue.js源码(2):初探List Rendering
  • 对象管理器(defineProperty)学习笔记
  • 聚簇索引和非聚簇索引
  • 算法-插入排序
  • 我与Jetbrains的这些年
  • 用mpvue开发微信小程序
  • 源码安装memcached和php memcache扩展
  • ​Java并发新构件之Exchanger
  • (2022 CVPR) Unbiased Teacher v2
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣)循环队列的实现与详解(C语言)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (全注解开发)学习Spring-MVC的第三天
  • (四)Linux Shell编程——输入输出重定向
  • (一)80c52学习之旅-起始篇
  • (转载)Linux 多线程条件变量同步
  • .form文件_SSM框架文件上传篇
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 成都线下面基会拉开序幕
  • .net mvc 获取url中controller和action
  • .NET 分布式技术比较
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net访问oracle数据库性能问题
  • .NET和.COM和.CN域名区别
  • ??javascript里的变量问题
  • @Transient注解
  • [20160807][系统设计的三次迭代]
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [codevs] 1029 遍历问题
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战