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)生成等效语法树代码
已知问题
作者信息
作者:林小
邮箱:jevonsflash@qq.com
License
The MIT License (MIT)