.NET Core 开源项目 Anet 在路上
今天給大家介紹我剛開源的一個 .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<MessageJob> _logger;
? ?public MessageJob(ILogger<MessageJob> 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<MessageJob>();
? ? ? ?});
? ? ? ?// 1. 簡單任務調度示例
? ? ? ?JobScheduler.StartNew<MessageJob>(Settings.JobIntervalSeconds);
? ? ? ?// ...(其它示例)
? ? ? ?// 等待 Ctrl+C 或關閉窗口
? ? ? ?JobScheduler.WaitForShutdown();
? ?}
}
一個簡單的消息發送服務就做好了,每隔指定秒數就會執行發送任務。運行后在控制臺看到的效果是:
這個示例包含了記錄日志,控制臺上的信息都是臨時的,你也可以查看運行目錄下的 logs 文件夾中的日志文件。完整代碼請前往 GitHub 查看。
Anet 目前狀態
Anet 才剛起步,處在最小可用狀態。它目前只是一個通用庫,封裝了一些常用的類(比如基于 Snowflake 算法的 Id 生成器、用戶密碼加密等),還算不上框架,還有很多事情要做。后面我也會寫更多的文章介紹這個項目。
但一個人的力量終究是有限的,特別希望大家能加入到這個項目中和我一起開發。
歡迎貢獻代碼,期待您的加入!
https://github.com/liamwang/anet
總結
以上是生活随笔為你收集整理的.NET Core 开源项目 Anet 在路上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用EFCore Lazy Loadi
- 下一篇: .NET 开源项目 Anet 介绍