• 他山之石可以攻玉:使用xxl-job运行.netcore任务


    互联网上有非常多优秀成熟的开源项目,我们没必要重复造轮子,合理的使用这些框架为我们所用,达到快速高质的完成项目目标才是我们追求的,记住他山之石可以攻玉

    1.场景介绍

    电商业务里经常对某些商品做促销处理,为了查询性能,需要定时把促销商品的促销信息写入缓存

    任务需求描述:

    每隔2分钟促销商品信息更新到Redis缓存中

    2.实现方案

     2.1 编写.netcore任务代码

       新建一个.netcore控制台项目 PromoteProductCacheInfo

      下面是模拟代码

     static void Main(string[] args)
            {
                Console.WriteLine("开始写入商品促销信息:");
                var sw = new Stopwatch();
                sw.Start();
                int successcount = 0; 
                //商品数量
                int procount = 5;
                for (int i = 0;i < procount; i++)
                {
                    ProtoProductCacheInfo.ProductCacheInfo product = new ProtoProductCacheInfo.ProductCacheInfo();
                    product.Proid = i;
                    product.Promotetitle = "限时特惠,8折促销";
                    product.Promoteprice = GetPromotePrice(100f); 
                    var isok = SaveData(product);
                    successcount =  isok ? successcount++ : successcount;
                    Console.WriteLine("商品:" +i+ "写入缓存" + (isok?"成功":"失败"));
                }
                sw.Stop();
                Console.WriteLine("共{0}个促销商品,写入成功{1}个,耗时:{1}", procount, successcount, sw.ElapsedMilliseconds);
            }
    
    
            /// <summary>
            /// 获取促销价格
            /// </summary>
            /// <param name="price"></param>
            /// <returns></returns>
            static float GetPromotePrice(float price)
            {
                return price * 0.8f;
            }
    
            /// <summary>
            /// 写入Redis缓存
            /// </summary>
            /// <param name="product"></param>
            /// <returns></returns>
            static bool SaveData(ProductCacheInfo product)
            {
                string cachekey = CacheKeyprefix + product.Proid;
                return CodisCache.Set(cachekey, product.ToByteArray(), CacheExpireIn); 
            }

     2.2 发布上传

           我们选择Release模式发布代码,生成好后将 inRelease etcoreapp3.1下的代码上传到xxl-job执行器所在的所有服务器上, 我这里是 /data/xxl-job/jobs/PromoteProductCacheInfo 目录下

     2.3 配置任务

         在任务调度中心我们新建一个任务

         任务描述:促销商品信息写入缓存

         运行模式:GLUE(Shell) 。这里使用shell模式,这样我们就可以使用shell脚本来执行我们的.netcore程序了

         Cron:0 /2 * * * ?   我们可以非常方便的编写cron表达式。

          填写完任务信息后保存,这样我们就创建了一个定时执行的job,可以在任务管理看到我们的任务已经存在了。

    2.4 编写shell脚本

      我们在任务调度中心的任务管理中找到创建的任务,点击右边的GLUE按钮打开脚本编辑页面,写入如下代码

     

    #!/bin/bash
    cd /data/xxl-job/jobs/PromoteProductCacheInfo
    dotnet PromoteProductCacheInfo.dll
    exit 0

     保存后我们的定时任务就算创建成功了,并且我们在任务的执行日志里可以看到Console.WriteLine的输出日志

                    
    2020-09-15 10:48:34 [com.xxl.job.core.thread.JobThread#run]-[124]-[Thread-3134153] 
    ----------- xxl-job job execute start -----------
    ----------- Param:
    2020-09-15 10:48:34 [com.xxl.job.core.handler.impl.ScriptJobHandler#execute]-[64]-[Thread-3134153] ----------- script file:/data/xxljob/executor/www/gluesource/459_1600073830000.sh -----------
    开始写入商品促销信息:
    商品:1写入缓存成功
    商品:2写入缓存成功
    商品:3写入缓存成功
    商品:4写入缓存成功
    商品:5写入缓存成功
    共5个促销商品,写入成功5个,耗时:11
    2020-09-15 10:48:34 [com.xxl.job.core.thread.JobThread#run]-[129]-[Thread-3134153] 
    ----------- xxl-job job execute end(finish) -----------
    ----------- ReturnT:ReturnT [code=200, msg=null, content=null]
    2020-09-15 10:48:34 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[133]-[Thread-39] 
    ----------- xxl-job callback success
    
    [Load Log Finish]

    3. 总结

     XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。具体参考 xxl-job

    .NET Core 主打的是跨平台、开源、强劲性能、多样化部署方案等,.netcore详细介绍可以去看善友老师的博客

    缓存使用谷歌protobuf协议存储结构,方便跨平台跨语言调用

     

       

     

         

  • 相关阅读:
    强化学习
    训练深度神经网络失败的罪魁祸首是退化
    wod2vec&fasttext&doc2vec#ida2vec
    leetcode动态规划之最长回文子串
    数据增强
    【认证与授权】Spring Security自定义页面
    【认证与授权】Spring Security的授权流程
    【认证与授权】Spring Security系列之认证流程解析
    【认证与授权】Spring Security系列之初体验
    【认证与授权】2、基于session的认证方式
  • 原文地址:https://www.cnblogs.com/pingyang/p/xxl-job-run-netcore.html
Copyright © 2020-2023  润新知