歡迎光臨
每天分享高質量文章

.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 _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

    贊(0)

    分享創造快樂