Soa: 一個輕量級的微服務庫
Soa
項目地址:Github:MatoApps/Soa
介紹
一個輕量級的微服務庫,基於.Net 6 + Abp框架 可快速地將現有項目改造成為面向服務體系結構,實現模塊間松耦合。
感謝
RabbitTeam 的項目 RabbitCloud
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實現)
更新內容:
Date | Version | Content |
---|---|---|
V0.9.0 | 2022-5-17 | 初始版本 |
快速開始
網關(客戶端) GatewaySample
- 添加對Soa庫的引用
- 添加對Soa.Client庫的引用
Startup.cs 文件
- 刪除AddAbp
// services.AddAbp();
- 添加AddSoaClient
services.AddSoaClient<GatewaySampleWebHostModule>(new SoaClientOptions()
{
IsDevelopment = _hostingEnvironment.IsDevelopment(),
LoggerProvider = _appConfiguration["App:UseLogger"].ToUpper(),
PlugInsPath = Path.Combine(_hostingEnvironment.WebRootPath, "PlugIns")
},true);
- 刪除UseAbp
//app.UseAbp();
- 添加UseSoaClient
app.UseSoaClient(options => { options.UseAbpRequestLocalization = false; }); // Initializes Soa framework.
GatewaySampleWebHostModule.cs 文件
- 添加SoaClientModule模塊依賴
[DependsOn(typeof(SoaClientModule))]
public class GatewaySampleWebHostModule: AbpModule
{
//Your code
}
- 配置 appsettings.json 文件
- 配置 Hangfire
微服務抽象層 IService1
IService1Manager.cs 文件
- 構建接口IService1Manager並繼承於ISoaService
- 添加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 文件
- 添加SoaServerModule模塊依賴
[DependsOn(typeof(SoaServerModule))]
public class Service1HostModel : AbpModule
{
//Your code
}
Service1Manager.cs 文件
- 構建類Service1Manager
- 繼承IService1Manager並實現其成員
public class Service1Manager : DomainService , IService1Manager
{
//實現業務
public string GetHelloWorld()
{
return "hello world !";
}
}
- 配置 appsettings.json 文件
關於appsettings.json的配置,請參考 配置說明
關於Hangfire的配置,請參考 定時任務
完整示例請參考 Sample
更多資訊請閱讀系列博客
系列博客
- 使用Soa庫+Abp搭建微服務項目框架(一):Abp與DDD相關知識回顧
- 使用Soa庫+Abp搭建微服務項目框架(二):面向服務體系的介紹
- 使用Soa庫+Abp搭建微服務項目框架(三):項目改造
- 使用Soa庫+Abp搭建微服務項目框架(四):動態代理和RPC
- 使用Soa庫+Abp搭建微服務項目框架(五):服務發現和健康監測
工具
- 此工具能將C#代碼,轉換成使用語法工廠構造器(SyntaxFactory)生成等效語法樹代碼
已知問題
作者信息
作者:林小
License
The MIT License (MIT)