首页 > 其他分享 >一个简单的队列实现

一个简单的队列实现

时间:2023-12-01 14:48:13浏览次数:30  
标签:return log record 队列 实现 job 简单 data id

控制器代码

<?php

namespace app\index\controller;

use think\facade\Queue;

class Job extends \app\BaseController
{
    /**
     * @定时任务
     *
     * @return void
     */
    public function test(){
        //参数
        $params = ['id'=>10086];
        $isPushed = Queue::later(3, \app\index\job\Order::class, $params, "order");
        if($isPushed !== false){
            echo date('Y-m-d H:i:s') . " 队列添加成功";
        }else{
            echo '队列添加失败';
        }
    }
}

队列代码

<?php


namespace app\index\job;


use think\facade\Db;
use think\queue\Job;

class Order
{

    /**
     * 在宝塔里的  Supervisord管理器==添加手护进程
     * 名称就是 队列名称,启动命令是:php think queue:listen --queue +队列名
     * 启动用户:root
     * @队列执行
     * @param Job $job
     * @param [type] $param
     *
     * @return void
     */
    public function fire(Job $job, $param)
    {
        try {
            //参数
            $data = $param;
            /*操作开始 */
            $res = $this->handleOrder($data['id']);
            if (!$res){
               if ($job->attempts() > 2) {
                   record_log("任务已经重试2次,删除任务","job");
                   $job->delete();
                   return ;
               }
            }
            record_log("执行成功:".$res,"job_ok");
            //删除任务
            $job->delete();
        }catch (\Exception $exception){
            $job->delete();
            record_log($exception->getMessage(),"exception");
        }
    }

    /**
     * @处理数据
     * @param [type] $id
     *
     * @return void
     */
    public function handleOrder($id)
    {
        return true;
        //对订单进行数据库操作或其他等等
        //Db::name("order")->where("id",$data['id'])->save();
    }

    /**
     * @执行失败
     * @param [type] $data
     *
     * @return void
     */
    public function failed($data){
        // 记录日志
        record_log($data,'job_error');
    }

}

这只是一个思想, 很简单的代码实现;项目中具体可能需要考虑的比较多;



欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。

公众号

Don’t reinvent the wheel, library code is there to help.

文章来源:刘俊涛的博客


若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)

标签:return,log,record,队列,实现,job,简单,data,id
From: https://www.cnblogs.com/lovebing/p/17869655.html

相关文章

  • 直播平台源代码,实现一个简单的带tabs选项卡切换的首页导航功能
    直播平台源代码,实现一个简单的带tabs选项卡切换的首页导航功能 package.json: { "name":"angular-router", "version":"0.0.0", "scripts":{  "ng":"ng",  "start":"ngserve",  "bui......
  • Windows使用命令行方法,实现docker默认安装目录修改及更改docker镜像默认保存路径
    一、使用软连接方法,修改Docker默认安装目录查看Windows上安装DockerDesktop官方安装指南:https://docs.docker.com/desktop/install/windows-install/  1、提前在D盘新建Program\Docker,使用这行代码安装:"DockerDesktopInstaller.exe"install--installation-dir......
  • 通过Span实现高性能数组,实例解析
    Span<T>是C#7.2引入的一个强大的数据结构,用于表示内存中的一块连续数据。它可以用于实现高性能的数组操作,而无需额外的内存分配。在本文中,我将详细介绍如何使用Span<T>来实现高性能数组操作,并提供一些示例代码来说明其用法。什么是Span?Span<T>是System.Memory命名空间......
  • 当元素宽度增加时,如何实现“向右增加”,“向左增加”,“从中间向两侧增加”
    当元素宽度增加时,如何实现“向右增加”,“向左增加”,“从中间向两侧增加”。1.当div元素实现了左右居中时,当hover的时候设置width增大,那么宽度会默认从中间向两侧增加。(例子中的id=d1)2.一个未进行任何设置的div元素,当hover的时候设置width增大,那么宽度会默认向右增加。(例子中的id=......
  • 直方图均衡化原理与实现
    一直方图均衡化的概念直方图均衡化(HistogramEqualization)是一种**增强图像对比度**(ImageContrast)的方法,其主要思想是将一副图像的**灰度直方图分布**通过**累积分布函数**变成**近似均匀分布**(直观上在某个灰阶范围内像素值保持一致),从而增强图像的对比度。为了将原图像的......
  • 企业业务场景如何实现自动化连接?
    为什么要实现企业业务场景的自动化连接?就是可以提高效率,自动化连接可以减少人工操作和手动干预的需求,从而提高业务处理的速度和效率。通过自动化连接,不同的系统、应用程序和流程可以自动协同工作,减少了人工处理的时间和错误率。降低成本,自动化连接可以减少企业的运营成本。通过自动......
  • Gitlab项目仓库配置访问令牌,实现无密码拉取代码
    修改地址仓库地址cd$projectcd.gitvimconfig[remote"origin"] url=https://oauth2:访问令牌@仓库地址或者使用basic认证[remote"origin"] url=https://username:pwd@仓库地址ssh公钥加入到gitlab#配置密钥一路回车ssh-keygen-trsa-C'xxx@xxx.......
  • CRM系统助力设备制造行业,实现更好的业务决策
     设备制造业竞争激烈,公司要以客户为中心,搞好售后服务。CRM管理软件是设备制造业客户关系管理的重要工具。以下是CRM在设备制造业里的典型应用。 1.营销管理制订市场策略:设备制造通常涉及较长的决策周期和销售周期。客户可能会在多家供货商之间抉择,且订单达成后交付也较为繁......
  • 金融行业CRM,实现客户信息的整合与共享
    金融企业既要管理海量的客户数据,又需要建立长期稳定的客户关系,才能有效提升业务效率和盈利能力。要实现这些目标,就需要一款强大而灵活的CRM系统。接下来,我们就来说说CRM系统在金融行业的使用场景。销售自动化:ZohoCRM可以帮助金融企业自动化处理琐碎的日常工作,让销售人员集中精......
  • css实现:不固定宽高,随内容宽度自动增长的圆形
    css代码:.circle{display:inline-block;border-radius:50%;min-width:20px;min-height:20px;padding:5px;background:red;color:white;text-align:center;line-height:1;box-sizing:co......