.NET Core 开源项目 Anet 在路上
今天給大家介紹我剛開(kāi)源的一個(gè) .NET Core 項(xiàng)目:Anet。Anet 的目標(biāo)是實(shí)現(xiàn)一個(gè) .NET Core 通用庫(kù)、通用框架和通用模板。我給它的定義是:
A .NET Core Common Lib, Framework and Boilerplate.
它的取名正是來(lái)自于這句話的前面四個(gè)字母:ANET。Anet 的宗旨是打造一個(gè)簡(jiǎn)單易用的快速開(kāi)發(fā)項(xiàng)目模板,適用于 Console 應(yīng)用和 Web 應(yīng)用。
但是這個(gè)項(xiàng)目它還處于開(kāi)發(fā)階段,我現(xiàn)只是起了個(gè)頭,目前只封裝了一些簡(jiǎn)單的功能,不過(guò)已實(shí)現(xiàn)的部分已經(jīng)可以投入使用了。
項(xiàng)目地址:https://github.com/liamwang/anet
為什么選擇 Anet?
目前很多 .NET 開(kāi)源框架模板(比如 ABP)都比較重,學(xué)習(xí)成本高,使用起來(lái)很多條條框框,比較麻煩。在實(shí)際開(kāi)發(fā)中,經(jīng)常要做一些小服務(wù)或小工具,選這種重型的框架可能就不太合適了。而 Anet 就是為了解決這個(gè)問(wèn)題,它追求的是簡(jiǎn)單易用,適合快速開(kāi)發(fā)一個(gè)微服務(wù)或小工具。
一個(gè)簡(jiǎn)單的任務(wù)輪循例子
下面演示如何通過(guò) Anet 來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單任務(wù)輪循程序,模擬一個(gè)發(fā)送消息的任務(wù)調(diào)度服務(wù)。這個(gè)示例在 GitHub 有 Sample,我就不貼所有代碼了,只選重點(diǎn)。
實(shí)際場(chǎng)景應(yīng)該是這樣的,每隔幾秒鐘從緩存隊(duì)列中獲取要發(fā)送的消息,調(diào)用其它接口執(zhí)行發(fā)送,并且需要有日志。如果出現(xiàn)異常,服務(wù)不能終止或崩潰,即需要有容錯(cuò)機(jī)制(一般還會(huì)有重試機(jī)制等,就不在這例子中講了)。Anet 封裝了一個(gè) JobScheduler,它可以滿足大部分的這一類需求。
首先創(chuàng)建一個(gè) Console(.NET Core)應(yīng)用,安裝 Anet 包:
dotnet add package Anet然后添加一個(gè) MessageJob 類,使它實(shí)現(xiàn) IJob 接口,代碼如下:
public class MessageJob : IJob{
? ?private readonly ILogger<MessageJob> _logger;
? ?public MessageJob(ILogger<MessageJob> logger)
? ?{
? ? ? ?_logger = logger;
? ?}
? ?public Task ExecuteAsync()
? ?{
? ? ? ?return Task.Run(() =>
? ? ? ?{
? ? ? ? ? ?// 模擬發(fā)送消息
? ? ? ? ? ?_logger.LogInformation("正在發(fā)送消息...");
? ? ? ? ? ?Thread.Sleep(3000);
? ? ? ? ? ?_logger.LogInformation("消息發(fā)送成功。");
? ? ? ?});
? ?}
? ?public Task OnExceptionAsync(Exception ex)
? ?{
? ? ? ?_logger.LogError(ex, "發(fā)送消息出錯(cuò)。");
? ? ? ?return Task.FromResult(0);
? ?}
}
每個(gè) Console 程序都需要先調(diào)用 AnetGlobal 中的 InitConsoleApp 方法來(lái)初始化,通過(guò)這個(gè)方法內(nèi)可以進(jìn)行一些自定義配置。
在 Program.cs 中添編寫(xiě)如下代碼:
public class Program{
? ?public static SettingsModel Settings { get; set; }
? ?static void Main(string[] args)
? ?{
? ? ? ?Console.Title = "Aet 示例 - 簡(jiǎn)單任務(wù)調(diào)度程序";
? ? ? ?// 初始化應(yīng)用
? ? ? ?AnetGlobal.InitConsoleApp((config, services) =>
? ? ? ?{
? ? ? ? ? ?// 綁定配置
? ? ? ? ? ?Settings = new SettingsModel();
? ? ? ? ? ?config.Bind(Settings);
? ? ? ? ? ?// 注冊(cè)服務(wù)
? ? ? ? ? ?services.AddTransient<MessageJob>();
? ? ? ?});
? ? ? ?// 1. 簡(jiǎn)單任務(wù)調(diào)度示例
? ? ? ?JobScheduler.StartNew<MessageJob>(Settings.JobIntervalSeconds);
? ? ? ?// ...(其它示例)
? ? ? ?// 等待 Ctrl+C 或關(guān)閉窗口
? ? ? ?JobScheduler.WaitForShutdown();
? ?}
}
一個(gè)簡(jiǎn)單的消息發(fā)送服務(wù)就做好了,每隔指定秒數(shù)就會(huì)執(zhí)行發(fā)送任務(wù)。運(yùn)行后在控制臺(tái)看到的效果是:
這個(gè)示例包含了記錄日志,控制臺(tái)上的信息都是臨時(shí)的,你也可以查看運(yùn)行目錄下的 logs 文件夾中的日志文件。完整代碼請(qǐng)前往 GitHub 查看。
Anet 目前狀態(tài)
Anet 才剛起步,處在最小可用狀態(tài)。它目前只是一個(gè)通用庫(kù),封裝了一些常用的類(比如基于 Snowflake 算法的 Id 生成器、用戶密碼加密等),還算不上框架,還有很多事情要做。后面我也會(huì)寫(xiě)更多的文章介紹這個(gè)項(xiàng)目。
但一個(gè)人的力量終究是有限的,特別希望大家能加入到這個(gè)項(xiàng)目中和我一起開(kāi)發(fā)。
歡迎貢獻(xiàn)代碼,期待您的加入!
https://github.com/liamwang/anet
總結(jié)
以上是生活随笔為你收集整理的.NET Core 开源项目 Anet 在路上的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何用EFCore Lazy Loadi
- 下一篇: .NET 开源项目 Anet 介绍