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 文件
- 删除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)
项目地址
Soa: 一个轻量级的微服务库的更多相关文章
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- 使用MicroService4Net 快速创建一个简单的微服务
“微服务架构(Microservice Architecture)”一词在过去几年里广泛的传播,它用于描述一种设计应用程序的特别方式,作为一套独立可部署的服务.目前,这种架构方式还没有准确的定义,但是 ...
- 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种高层级的架构设计理念,可通过在网络上使用基于通用通信语言的服务接口,让软件组件可重复使用. 那么什么是 ...
- 一个天气的微服务springcloud
1.开发环境 jdk8 和 gradle 4. ---------------搭建一个天气预报系统 1.bootstrap就是一堆样式文件,首先有html标签,然后加上各种样式以后就变得好看了2.j ...
- 看了 Spring 官网脚手架真香,也撸一个 SpringBoot DDD 微服务的脚手架!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么我们要去造轮子? 造轮子的核心目的,是为了解决通用共性问题的凝练和复用. 虽然 ...
- kubernetes实战篇之部署一个.net core微服务项目
目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...
- Go的微服务库kite
Kite Kite是用Go开发的一套RPC库,很适合作为分布式微服务的开发框架. Kite 的传输层使用 SockJS 提供的WebSocket服务, 浏览器Javascript也可以连接到Kite上 ...
- 一个轻量级的3D CSS 库
JavaScript 3D library 该项目的目的是为了打造轻量级的.实用简单的3D CSS库. Usage使用方法 下载 minified库文件 和 css文件,并将其包含于你的HTML中,就 ...
- atititi.soa 微服务 区别 联系 优缺点.doc
atititi.soa 微服务 区别 联系 优缺点.doc 1. 应用微服务的动机,跟传统巨石应用的比较1 2. 面向服务架构(SOA) esb2 3. 微服务架构(Microservices)2 ...
随机推荐
- Redis++:Redis做分布式锁真的靠谱吗
Redis做分布式锁真的靠谱吗 Redis的分布式锁可以通过Lua进行实现,通过setnx和expire命令连用的方式 || 也可以使用高版本的方法同时设置失效时间,但是假如在以下情况下,就会造成无锁 ...
- 数据库SQL之学习SUM总和套用条件CASE WHEN语句
1.SQL之学习SUM总和套用条件CASE WHEN语句 2.条件语句CASE WHEN 格式已经在图中写的很明白了 -- 查询t_wzw库中所有数据 总和(条件为t_wzw.birthday > ...
- C语言常用字符串函数
string.h头文件中常用的函数 C 库函数 - strcat() char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所 ...
- ES6-11学习笔记--代理Proxy
Proxy代理 常用拦截方法 ES5拦截: let obj = {} let newVal = '' Object.defineProperty(obj, 'name', { get() { cons ...
- Linux 0.11源码阅读笔记-高速缓冲
高速缓冲 概念 高速缓冲区是内存中的一块内存,在块设备与内核其它程序之间起着一个桥梁作用.内核程序如果需要访问块设备中的数据,都需要经过高速缓冲区来间接的操作. 高速缓冲区结构 高速缓冲区被划分为1k ...
- 【Android开发】APP桌面角标问题
Demo:https://github.com/baitutang1221/BadgeNumberManager 参考:https://juejin.im/post/59f2e59751882578c ...
- java对象有什么重要的?
3.历史上讲,对象有什么重要的? [新手可忽略不影响继续学习]早期的编程主要是面向过程的编程,处理的问题都相对的简单,比较过程化,换句话说,就是一步一步从开始到结束,比如第一步进入电梯,第二步关门, ...
- mysql各个集群方案的优劣
集群的好处 高可用性:故障检测及迁移,多节点备份. 可伸缩性:新增数据库节点便利,方便扩容. 负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力. 集群要考虑的风险 网络分裂:群集还可能由于网络 ...
- Python IDLE清屏
在学习和使用Python的过程中,少不了要与Python IDLE打交道.但使用 Python IDLE 都会遇到一个常见而又懊恼的问题--要怎么清屏? 答案是为IDLE增加一个清屏的扩展ClearW ...
- docker搭建cordova 11环境
cordova@11 依赖环境: Java_jdk@1.8.0 Nodejs@12.22.9 android-sdk Build-tools 28 API 28 apache-ant@1.10.12 ...