他山之石可以攻玉:使用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模式發布代碼,生成好后將 \bin\Release\netcoreapp3.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協議存儲結構,方便跨平台跨語言調用

 

   

 

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM