.NET 6 + Abp框架一個(gè)輕量級(jí)微服務(wù)庫(kù)
Soa
項(xiàng)目地址:https://github.com/MatoApps/Soa
介紹
一個(gè)輕量級(jí)的微服務(wù)庫(kù),基于.NET 6 + Abp框架 可快速地將現(xiàn)有項(xiàng)目改造成為面向服務(wù)體系結(jié)構(gòu),實(shí)現(xiàn)模塊間松耦合。
感謝
RabbitTeam 的項(xiàng)目 RabbitCloud:
https://github.com/RabbitTeam/RabbitCloud
grissomlau 的項(xiàng)目jimu:
https://github.com/grissomlau/jimu
部分模塊以及算法代碼參考自以上項(xiàng)目
特點(diǎn)
支持DotNetty和Http兩種模式的RPC 支持自動(dòng)路由發(fā)現(xiàn)注冊(cè)與微服務(wù)健康監(jiān)測(cè) 支持模塊以及模塊的依賴關(guān)系 支持簡(jiǎn)單對(duì)象(POCO)作為參數(shù)或返回類型 支持登錄與鑒權(quán) 支持多語(yǔ)言/本地化
內(nèi)容
基于Roslyn的動(dòng)態(tài)客戶代理類(Proxy模塊) POCO對(duì)象傳輸編解碼(TypeConverter模塊) 基于DotNetty或者HTTP的RPC(Transport模塊) 路由服務(wù)發(fā)現(xiàn)(ServiceDiscovery模塊) 健康監(jiān)測(cè)(HealthCheck模塊) 基于swagger的Api文檔生成 基于Attribute注解的路由配置 基于Json配置文件的系統(tǒng)配置(Abp實(shí)現(xiàn)) 基于Hangfire的計(jì)劃任務(wù) 基于Castle Windsor的Ioc(Abp實(shí)現(xiàn)) 基于Log4Net的日志(Abp實(shí)現(xiàn)) 基于AbpZero的用戶系統(tǒng) 基于EF,并實(shí)現(xiàn)模型的Repository倉(cāng)儲(chǔ)模式(Abp實(shí)現(xiàn))
更新內(nèi)容
| Date | Version | Content |
|---|---|---|
| V0.9.0 | 2022-5-17 | 初始版本 |
快速開(kāi)始
網(wǎng)關(guān)(客戶端) GatewaySample
添加對(duì)Soa庫(kù)的引用 添加對(duì)Soa.Client庫(kù)的引用
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
微服務(wù)抽象層 IService1
IService1Manager.cs 文件
1、構(gòu)建接口IService1Manager并繼承于ISoaService
2、添加Soa標(biāo)簽和Abp標(biāo)簽
[SoaAuthorize("permission_name")] //Soa權(quán)限標(biāo)簽
[SoaServiceRoute("soa_api/service1")] //Soa服務(wù)路由標(biāo)簽
public interface IService1Manager : ISoaService
{
//定義接口
[SoaService(CreatedBy = "linxiao", Comment = "bring a string to the world and say hello !")]
[SoaAuthorize("permission_name")]
public string GetHelloWorld();
}
將微服務(wù)抽象層引用添加至網(wǎng)關(guān)(客戶端) GatewaySample
網(wǎng)關(guān)Ioc添加各微服務(wù)抽象層
var ass = Assembly.Load("Soa.Sample.IAuthorizedService");
IocManager.RegisterAssemblyByConvention(ass);
網(wǎng)關(guān)引入各微服務(wù)權(quán)限
Configuration.Authorization.Providers.Add <AuthorizedServiceAuthorizationProvider>();
網(wǎng)關(guān)引入各微服務(wù)本地化資源
var loc = Configuration.Localization;
AuthorizedServiceLocalizationConfigurer.Configure(loc);
其他的Abp配置等等
微服務(wù)(服務(wù)端) Service1
添加對(duì)微服務(wù)抽象層的引用
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、構(gòu)建類Service1Manager
2、繼承IService1Manager并實(shí)現(xiàn)其成員
public class Service1Manager : DomainService , IService1Manager
{
//實(shí)現(xiàn)業(yè)務(wù)
public string GetHelloWorld()
{
return "hello world !";
}
}
配置 appsettings.json 文件
工具
Roslyn Syntax Tool:https://github.com/MatoApps/RoslynSyntaxTool
此工具能將C#代碼,轉(zhuǎn)換成使用語(yǔ)法工廠構(gòu)造器(SyntaxFactory)生成等效語(yǔ)法樹(shù)代碼
項(xiàng)目地址
Github:https://github.com/MatoApps/Soa
轉(zhuǎn)自: 林曉lx
鏈接:cnblogs.com/jevonsflash/p/16284972.html
