天天看點

.NET 6 + Abp架構一個輕量級微服務庫

作者:IT狂人日記

Soa

項目位址:https://github.com/MatoApps/Soa

介紹

一個輕量級的微服務庫,基于.NET 6 + Abp架構 可快速地将現有項目改造成為面向服務體系結構,實作子產品間松耦合。

感謝

RabbitTeam 的項目 RabbitCloud:

https://github.com/RabbitTeam/RabbitCloud

grissomlau 的項目jimu:

https://github.com/grissomlau/jimu

部分子產品以及算法代碼參考自以上項目

特點

  • 支援DotNetty和Http兩種模式的RPC
  • 支援自動路由發現注冊與微服務健康監測
  • 支援子產品以及子產品的依賴關系
  • 支援簡單對象(POCO)作為參數或傳回類型
  • 支援登入與鑒權
  • 支援多語言/本地化

内容

  • 基于Roslyn的動态客戶代理類(Proxy子產品)
  • POCO對象傳輸編解碼(TypeConverter子產品)
  • 基于DotNetty或者HTTP的RPC(Transport子產品)
  • 路由服務發現(ServiceDiscovery子產品)
  • 健康監測(HealthCheck子產品)
  • 基于swagger的Api文檔生成
  • 基于Attribute注解的路由配置
  • 基于Json配置檔案的系統配置(Abp實作)
  • 基于Hangfire的計劃任務
  • 基于Castle Windsor的Ioc(Abp實作)
  • 基于Log4Net的日志(Abp實作)
  • 基于AbpZero的使用者系統
  • 基于EF,并實作模型的Repository倉儲模式(Abp實作)

更新内容

DateVersionContentV0.9.02022-5-17初始版本

快速開始

網關(用戶端) GatewaySample

  • 添加對Soa庫的引用
  • 添加對Soa.Client庫的引用

Startup.cs 檔案

1、删除AddAbp

// services.AddAbp();
           

2、添加AddSoaClient

services.AddSoaClient<GatewaySampleWebHostModule>(new SoaClientOptions()
{
    IsDevelopment = _hostingEnvironment.IsDevelopment(),
    LoggerProvider = _appConfiguration["App:UseLogger"].ToUpper(),
    PlugInsPath = Path.Combine(_hostingEnvironment.WebRootPath, "PlugIns")
},true);
           

3、删除UseAbp

//app.UseAbp();
           

4、添加UseSoaClient

app.UseSoaClient(options => { options.UseAbpRequestLocalization = false; }); // Initializes Soa framework.
           

GatewaySampleWebHostModule.cs 檔案

5、添加SoaClientModule子產品依賴

[DependsOn(typeof(SoaClientModule))]
public class GatewaySampleWebHostModule: AbpModule
{
    //Your code
}
           
  • 配置 appsettings.json 檔案
  • 配置 Hangfire

微服務抽象層 IService1

IService1Manager.cs 檔案

1、建構接口IService1Manager并繼承于ISoaService

2、添加Soa标簽和Abp标簽

[SoaAuthorize("permission_name")]     //Soa權限标簽
[SoaServiceRoute("soa_api/service1")]           //Soa服務路由标簽 
public interface IService1Manager : ISoaService
{
    //定義接口    
    [SoaService(CreatedBy = "linxiao", Comment = "bring a string to the world and say hello !")]
    [SoaAuthorize("permission_name")]    
    public string GetHelloWorld();

}
           
  • 将微服務抽象層引用添加至網關(用戶端) GatewaySample

網關Ioc添加各微服務抽象層

var ass = Assembly.Load("Soa.Sample.IAuthorizedService");
IocManager.RegisterAssemblyByConvention(ass);
           

網關引入各微服務權限

Configuration.Authorization.Providers.Add <AuthorizedServiceAuthorizationProvider>();
           

網關引入各微服務本地化資源

var loc = Configuration.Localization;
AuthorizedServiceLocalizationConfigurer.Configure(loc);
           

其他的Abp配置等等

微服務(服務端) Service1

  • 添加對微服務抽象層的引用

Program.cs 檔案

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSoa<Service1HostModel>();
var webapp = builder.Build();
webapp.UseSoaServer();
webapp.Run();
           

Service1HostModel.cs 檔案

1、添加SoaServerModule子產品依賴

[DependsOn(typeof(SoaServerModule))]
public class Service1HostModel : AbpModule
{
    //Your code
}
           

Service1Manager.cs 檔案

1、建構類Service1Manager

2、繼承IService1Manager并實作其成員

public class Service1Manager : DomainService , IService1Manager
{
    //實作業務
    public string GetHelloWorld()
    {
        return "hello world !";
    }
}
           
  • 配置 appsettings.json 檔案

關于appsettings.json的配置,請參考 配置說明:

https://github.com/MatoApps/Soa/blob/master/SOA/Hangfire Guid-zh-Hans.md

關于Hangfire的配置,請參考 定時任務:

https://github.com/MatoApps/Soa/blob/master/SOA/Hangfire Guid-zh-Hans.md

完整示例請參考Sample:

https://github.com/MatoApps/Soa/tree/master/sample

工具

Roslyn Syntax Tool:https://github.com/MatoApps/RoslynSyntaxTool

  • 此工具能将C#代碼,轉換成使用文法工廠構造器(SyntaxFactory)生成等效文法樹代碼

項目位址

Github:https://github.com/MatoApps/Soa

轉自: 林曉lx

連結:cnblogs.com/jevonsflash/p/16284972.html

繼續閱讀