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

Soa: 一个轻量级的微服务库的更多相关文章

  1. 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

    [编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...

  2. 使用MicroService4Net 快速创建一个简单的微服务

    “微服务架构(Microservice Architecture)”一词在过去几年里广泛的传播,它用于描述一种设计应用程序的特别方式,作为一套独立可部署的服务.目前,这种架构方式还没有准确的定义,但是 ...

  3. 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?

    SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种高层级的架构设计理念,可通过在网络上使用基于通用通信语言的服务接口,让软件组件可重复使用. 那么什么是 ...

  4. 一个天气的微服务springcloud

    1.开发环境 jdk8  和 gradle 4. ---------------搭建一个天气预报系统 1.bootstrap就是一堆样式文件,首先有html标签,然后加上各种样式以后就变得好看了2.j ...

  5. 看了 Spring 官网脚手架真香,也撸一个 SpringBoot DDD 微服务的脚手架!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么我们要去造轮子? 造轮子的核心目的,是为了解决通用共性问题的凝练和复用. 虽然 ...

  6. kubernetes实战篇之部署一个.net core微服务项目

    目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...

  7. Go的微服务库kite

    Kite Kite是用Go开发的一套RPC库,很适合作为分布式微服务的开发框架. Kite 的传输层使用 SockJS 提供的WebSocket服务, 浏览器Javascript也可以连接到Kite上 ...

  8. 一个轻量级的3D CSS 库

    JavaScript 3D library 该项目的目的是为了打造轻量级的.实用简单的3D CSS库. Usage使用方法 下载 minified库文件 和 css文件,并将其包含于你的HTML中,就 ...

  9. atititi.soa  微服务 区别 联系 优缺点.doc

    atititi.soa  微服务 区别 联系 优缺点.doc 1. 应用微服务的动机,跟传统巨石应用的比较1 2. 面向服务架构(SOA)  esb2 3. 微服务架构(Microservices)2 ...

随机推荐

  1. 领域驱动(DDD)设计和开发实战

    领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中.大部分关于此主题的著作和文章都以 Eric Evans 的书<领域驱动设计>为基础,主要从概念和设计的角度探讨领域建模 ...

  2. ROS机器人操作系统相关书籍、资料和学习路径

    作者:Top Liu链接:https://zhuanlan.zhihu.com/p/30391098来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文是易科机器人实验 ...

  3. (stm32f103学习总结)—stm32中断系统

    一.NVIC 介绍 NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功 ...

  4. [CSS]《CSS揭秘》第四章——视觉效果

    投影 单侧投影 box-shadow:0px 10px 10px -5px black; 邻边投影 box-shadow:10px 10px 10px 2px black; 双侧投影 box-shad ...

  5. PWA 时代的移动端图片优化新思路

    图片通常是移动端网页中最占流量的资源.在很多类型的网站中(比如电商.社区),图片占据了网页的大部分空间.优化图片的质量和加载速度成为提高用户体验的重要途径. 传统方案的弊端 目前有一些被广泛应用的方案 ...

  6. 腾讯云+社区开发者大会开启报名,WeGeek 邀你一起聊聊小程序

    刚满 2 岁的微信小程序,正给我们带来一种全新轻便的生活方式. 内测时的青涩还历历在目,到现在,小程序生态已日渐成熟.超过 150 万开发者在这里找到了自己的新天地,打磨出超过 100 万个小程序. ...

  7. Html5 Canvas学习之路(五)

    Canvas 图像(上) Canvas 图像API可以加载图像数据,然后直接将图像应用到画布上.还可以裁切.拼贴图像数据,以显示用户需要的部分.此外,Canvas还提供了像素数据的存储功能,这样就能对 ...

  8. Unity通过脚本创建Mesh(网格)

    ##1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在 新建脚本CreateMesh public class CreateMesh: MonoBehaviour { voi ...

  9. android软件简约记账app开发day09-主页面模块,收支记账信息的展示

    android软件简约记账app开发day09-主页面模块,收支记账信息的展示 我们第一天已经绘制了记账条目的界面,也在主界面设置了LietView来展示记账条目,今天来实现记账后再主界面的展示效果 ...

  10. PyTorch环境配置

    PyTorch环境配置 本文档用于记录PyTorch环境配置过程中的要点. PyTorch环境配置 安装Miniconda 安装PyTorch 配置远程开发工具 基于CUDA的张量 导入警告问题 参考 ...