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. 4.1 ROS元功能包

    4.1 ROS元功能包 场景:完成ROS中一个系统性的功能,可能涉及到多个功能包,比如实现了机器人导航模块,该模块下有地图.定位.路径规划...等不同的子级功能包.那么调用者安装该模块时,需要逐一的安 ...

  2. Servlet 3.0以上版本使用@WebServlet注解配置映射

    以前的Servlet都是在web.xml中进行配置,导致web.xml中各个Servlet的映射非常杂乱无章,后期也很难维护 本篇文章将详细阐述如何使用Servlet 3.0的新特性使用@WebSer ...

  3. 将子分支代码merge到主分支master分支

    1.首先切换到子分支: git checkout develop2.使用git pull 把分支代码pull下来: git pull3.切换到主分支: git checkout master4.把分支 ...

  4. 爬虫---scrapy全站爬取

    全站爬取1 基于管道的持久化存储 数据解析(爬虫类) 将解析的数据封装到item类型的对象中(爬虫类) 将item提交给管道, yield item(爬虫类) 在管道类的process_item中接手 ...

  5. Spring-JdbcTemplate(注入到spring容器)-02

    1.导入spring-jdbc和spring-tx坐标 <dependency> <groupId>junit</groupId> <artifactId&g ...

  6. MySQL 中继日志

    什么是中继日志从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件即relay-log日志中,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器 ...

  7. el-carousel手动切换图片

    添加ref 和 点击哪个地方切换的方法 <div class="center">       <div class="pw between"& ...

  8. 洛谷 P1162 填涂颜色 DFS

    P1162 填涂颜色 https://www.luogu.com.cn/problem/P1162 qaq搜索好抽象啊,蒟蒻表示难以理解,搞半天才做出来一道题,很挫败www 思路 染色法.找墙壁外的连 ...

  9. Python 一网打尽<排序算法>之从希尔排序算法的分治哲学开始

    1. 前言 本文将介绍希尔排序.归并排序.基数排序(桶排序).堆排序. 在所有的排序算法中,冒泡.插入.选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置. ...

  10. java的Integer中也会有缓存

    在上篇<java的自动拆箱会发生NPE>博客中接收了java中的Integer中的自动拆箱产生的NPE,其实对于所有的包装类来说都是一样的,都会产生这样的问题,大家需要举一反三,做学问学知 ...