今天給大家介紹我剛開源的一個 .NET Core 專案:Anet。Anet 的標的是實現一個 .NET Core 通用庫、通用框架和通用模板。我給它的定義是:
A .NET Core Common Lib, Framework and Boilerplate.
它的取名正是來自於這句話的前面四個字母:ANET。Anet 的宗旨是打造一個簡單易用的快速開發專案模板,適用於 Console 應用和 Web 應用。
但是這個專案它還處於開發階段,我現只是起了個頭,目前只封裝了一些簡單的功能,不過已實現的部分已經可以投入使用了。
專案地址:https://github.com/liamwang/anet
為什麼選擇 Anet?
目前很多 .NET 開源框架模板(比如 ABP)都比較重,學習成本高,使用起來很多條條框框,比較麻煩。在實際開發中,經常要做一些小服務或小工具,選這種重型的框架可能就不太合適了。而 Anet 就是為瞭解決這個問題,它追求的是簡單易用,適合快速開發一個微服務或小工具。
一個簡單的任務輪循例子
下麵演示如何透過 Anet 來實現一個簡單任務輪循程式,模擬一個傳送訊息的任務排程服務。這個示例在 GitHub 有 Sample,我就不貼所有程式碼了,只選重點。
實際場景應該是這樣的,每隔幾秒鐘從快取佇列中獲取要傳送的訊息,呼叫其它介面執行傳送,並且需要有日誌。如果出現異常,服務不能終止或崩潰,即需要有容錯機制(一般還會有重試機制等,就不在這例子中講了)。Anet 封裝了一個 JobScheduler,它可以滿足大部分的這一類需求。
首先建立一個 Console(.NET Core)應用,安裝 Anet 包:
dotnet add package Anet
然後新增一個 MessageJob 類,使它實現 IJob 介面,程式碼如下:
public class MessageJob : IJob
{
private readonly ILogger _logger;
public MessageJob(ILogger logger)
{
_logger = logger;
}
public Task ExecuteAsync()
{
return Task.Run(() =>
{
// 模擬傳送訊息
_logger.LogInformation("正在傳送訊息...");
Thread.Sleep(3000);
_logger.LogInformation("訊息傳送成功。");
});
}
public Task OnExceptionAsync(Exception ex)
{
_logger.LogError(ex, "傳送訊息出錯。");
return Task.FromResult(0);
}
}
每個 Console 程式都需要先呼叫 AnetGlobal 中的 InitConsoleApp 方法來初始化,透過這個方法內可以進行一些自定義配置。
在 Program.cs 中添編寫如下程式碼:
public class Program
{
public static SettingsModel Settings { get; set; }
static void Main(string[] args)
{
Console.Title = "Aet 示例 - 簡單任務排程程式";
// 初始化應用
AnetGlobal.InitConsoleApp((config, services) =>
{
// 系結配置
Settings = new SettingsModel();
config.Bind(Settings);
// 註冊服務
services.AddTransient();
});
// 1. 簡單任務排程示例
JobScheduler.StartNew(Settings.JobIntervalSeconds);
// ...(其它示例)
// 等待 Ctrl+C 或關閉視窗
JobScheduler.WaitForShutdown();
}
}
一個簡單的訊息傳送服務就做好了,每隔指定秒數就會執行傳送任務。執行後在控制檯看到的效果是:
這個示例包含了記錄日誌,控制臺上的資訊都是臨時的,你也可以檢視執行目錄下的 logs 檔案夾中的日誌檔案。完整程式碼請前往 GitHub 檢視。
Anet 目前狀態
Anet 才剛起步,處在最小可用狀態。它目前只是一個通用庫,封裝了一些常用的類(比如基於 Snowflake 演演算法的 Id 生成器、使用者密碼加密等),還算不上框架,還有很多事情要做。後面我也會寫更多的文章介紹這個專案。
但一個人的力量終究是有限的,特別希望大家能加入到這個專案中和我一起開發。
歡迎貢獻程式碼,期待您的加入!
https://github.com/liamwang/anet