码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

  • 相关阅读:
    C++ Lanternfish | Advent of Code Year 2021 Day 6
    元气森林推“有矿”,农夫山泉们跟着“卷”?
    centos安装docker和docker-compose
    radiantq:jQuery Gantt Package--好使的HTML5甘特图
    首个ChatGPT机器人- Figure 01;李开复旗下零一万物推出Yi系列AI大模型API
    Zebec 生态 AMA 回顾:Nautilus 以及 $ZBC 的未来
    队列题目:按递增顺序显示卡牌
    【TCP套接字编程,UDP套接字编程】
    GoLong的学习之路(八)语法之Map
    JS测试出最小支持字体,以及修复PDFJS的文本错误偏移
  • 原文地址:https://www.cnblogs.com/jevonsflash/p/16284972.html
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号