• 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 文件

    1. 删除AddAbp
    // services.AddAbp();
    
    1. 添加AddSoaClient
    services.AddSoaClient<GatewaySampleWebHostModule>(new SoaClientOptions()
    {
        IsDevelopment = _hostingEnvironment.IsDevelopment(),
        LoggerProvider = _appConfiguration["App:UseLogger"].ToUpper(),
        PlugInsPath = Path.Combine(_hostingEnvironment.WebRootPath, "PlugIns")
    },true);
    
    1. 删除UseAbp
    //app.UseAbp();
    
    1. 添加UseSoaClient
    app.UseSoaClient(options => { options.UseAbpRequestLocalization = false; }); // Initializes Soa framework.
    

    GatewaySampleWebHostModule.cs 文件

    1. 添加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的配置,请参考 配置说明

    关于Hangfire的配置,请参考 定时任务

    完整示例请参考 Sample

    更多资讯请阅读系列博客

    系列博客

    1. 使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾
    2. 使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍
    3. 使用Soa库+Abp搭建微服务项目框架(三):项目改造
    4. 使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC
    5. 使用Soa库+Abp搭建微服务项目框架(五):服务发现和健康监测

    工具

    Roslyn Syntax Tool

    • 此工具能将C#代码,转换成使用语法工厂构造器(SyntaxFactory)生成等效语法树代码

    已知问题

    作者信息

    作者:林小

    邮箱:jevonsflash@qq.com

    License

    The MIT License (MIT)

    项目地址

    Github:MatoApps/Soa

  • 相关阅读:
    手把手教你设计一个CSDN系统
    常见的数学物理方程
    [附源码]SSM计算机毕业设计郴职图书馆管理系统JAVA
    VS code扩展开发详解
    【Ajax】HTTP相关问题-XHR使用-跨域-同源-jsonp-CORS
    【Python】多线程
    终于还是熬不住了,转行了,分享一波刚学到的知识吧,字符串的自带函数.py
    图计算 on nLive:Nebula 的图计算实践
    ES6学习笔记
    力扣之螺旋矩阵,一起旋转起来(都能看懂)
  • 原文地址:https://www.cnblogs.com/jevonsflash/p/16284972.html