.NET 6 + Abp框架一個輕量級微服務庫
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 支持自動路由發(fā)現注冊與微服務健康監(jiān)測 支持模塊以及模塊的依賴關系 支持簡單對象(POCO)作為參數或返回類型 支持登錄與鑒權 支持多語言/本地化
內容
基于Roslyn的動態(tài)客戶代理類(Proxy模塊) POCO對象傳輸編解碼(TypeConverter模塊) 基于DotNetty或者HTTP的RPC(Transport模塊) 路由服務發(fā)現(ServiceDiscovery模塊) 健康監(jiān)測(HealthCheck模塊) 基于swagger的Api文檔生成 基于Attribute注解的路由配置 基于Json配置文件的系統(tǒng)配置(Abp實現) 基于Hangfire的計劃任務 基于Castle Windsor的Ioc(Abp實現) 基于Log4Net的日志(Abp實現) 基于AbpZero的用戶系統(tǒng) 基于EF,并實現模型的Repository倉儲模式(Abp實現)
更新內容
| Date | Version | Content |
|---|---|---|
| V0.9.0 | 2022-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
{
//實現業(yè)務
public string GetHelloWorld()
{
return "hello world !";
}
}
配置 appsettings.json 文件
工具
Roslyn Syntax Tool:https://github.com/MatoApps/RoslynSyntaxTool
此工具能將C#代碼,轉換成使用語法工廠構造器(SyntaxFactory)生成等效語法樹代碼
項目地址
Github:https://github.com/MatoApps/Soa
轉自: 林曉lx
鏈接:cnblogs.com/jevonsflash/p/16284972.html
