.NET微服务架构及API网关
一、MSA简介
1.1、MSA是什么
SOA实现 | 微服务架构实现 | |
企业级,自顶向下开展实施 | 团队级,自底向上开展实施 | |
粒度大:服务由多个子系统组成 | 粒度细:一个系统被拆分成多个服务,且服务的定义更加清晰 | |
重ESB:企业服务总线,集中式的服务架构 | 轻网关:无集中式总线,松散的服务架构 | |
开发过程复杂 | 易开发:减少了企业ESB开发的复杂性,与敏捷开发的思想高度结合在一起 | |
单块架构系统,相互依赖,部署复杂 | 服务能被独立部署 | |
1.2、我们的MSA框架
1.3、MSA框架实现架构


二、MSA框架的使用
1、服务托管
2、 路由
3、如何验证请求参数的合法性
1 Plugins.Add(new ValidationFeature());
2 container.RegisterValidator(typeof(OrderValidator));
4、服务
5、MSA内置的客户端
1 Plugins.Add(new ProtoBufFormat());
c、必须分别给Request DTO对象和Response DTO对象的各属性标上[DataMember(Order = {0})]特性,具体写法请见MSA Demo的ProductRequestDTO.cs和ProductResponseDTO.cs。
1 TResponse Get<TResponse>(IReturn<TResponse> requestDto);
6、MSA API可视化说明文档自动生成的实现
1 Plugins.Add(new SwaggerFeature());
如果需要在MSA API可视化说明文档中能够看到各请求参数、响应的含义说明,那么需要为Request DTO、Response DTO对象的各属性标上ApiMember,代码参考如下:

1 public class OrderRequest : IReturn<OrderResponse>
2 {
3 [ApiMember(Name = "Id", Description = "订单ID号", IsRequired = false)]
4 public int Id { get; set; }
5 [ApiMember(Name = "CustomerName", Description = "客户名", IsRequired = false)]
6 public string CustomerName { get; set; }
7 //......
8 [ApiMember(Name = "OrderItemList", Description = "订购的产品列表", IsRequired = false)]
9 public List<OrderItem> OrderItemList { get; set; }
10 }


7、运行结果


三、微服务治理

四、微服务网关API Gateway
4.1、API Gateway的简介

4.2、API Gateway的优点

- 网络隔离:微服务部署在了内网,通过API Gateway开放给PartnerAPI、WebAPI或MobileAPI。
- 在网关层面的轻量级消息路由和转换。
- 在网关层面对存在的微服务提供必要的抽象。例如,网关可以选择对不同的用户暴露不同的API。
- 一个中心的地方提供非功能性的能力,这些能力可复用, 比如超时、限流、熔断、监控、日志记录等。
- 通过适用API网关模式,微服务可以变得更加轻量,因为非功能性需求都在网关上实现了。
- 统一安全管控。
4.3、API Gateway的架构

4.4、API Gateway的功能
4.5、API Gateway的使用

五、Demo下载及更多资料
- MSADemo下载地址:https://github.com/das2017/MSADemo
- APIGatewayDemo下载地址:https://github.com/das2017/ApiGatewayDemo
- ServiceStack官网:https://servicestack.net/
原文链接: https://www.cnblogs.com/dotnet-arch-system/p/8504602.html
.NET微服务架构及API网关的更多相关文章
- spring cloud+dotnet core搭建微服务架构:Api网关(三)
前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...
- spring cloud+.net core搭建微服务架构:Api网关(三)
前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...
- 微服务架构中API网关的角色
[上海尚学堂的话]:本文主要讲述了Mashape的首席技术执行官Palladino对API网关的详细介绍,以及API网关在微服务中所起的作用,同时介绍了Mashape的一款开源API网关Kong. A ...
- spring cloud+dotnet core搭建微服务架构:Api授权认证(六)
前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...
- spring cloud+.net core搭建微服务架构:Api授权认证(六)
前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...
- Chris Richardson微服务翻译:构建微服务之使用API网关
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- Spring Cloud 微服务三: API网关Spring cloud gateway
前言:前面介绍了一款API网关组件zuul,不过发现spring cloud自己开发了一个新网关gateway,貌似要取代zuul,spring官网上也已经没有zuul的组件了(虽然在仓库中可以更新到 ...
- 谈谈微服务中的 API 网关(API Gateway)
前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...
- 微服务中的 API 网关(API Gateway)
API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...
随机推荐
- 复习java基础第六天(IO)
一:File 类 • 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内存)中. • 输出:将程序(内存)数据输出到磁盘.光盘等存储设备中 • Java 的 IO 流主要包括输入.输出两种 ...
- sql 导入excel 遇到问题
ALTER TABLE tab1 add id int identity primary key (注意:必须加identity,否则添加会失败) //导入excel时候 先把主键去掉 变为可为空,之 ...
- kvm介绍、安装及创建虚拟机
kvm虚拟化介绍 一.虚拟化分类 1.虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...
- 在 CentOS 7 上设置 grub2
在 CentOS 7 上设置 grub2 1. 开机选单是自动创建出来的 请勿尝试手动编辑开机选单,因为它是按照 /boot/ 目录内的文件自动创建出来的.然而你可以调整 /etc/default/g ...
- [frontend] 根据文字长度 自适应宽度 自适应高度+ Uncaught ReferenceError: xxx is not defined at HTMLDivElement.onclick
CSS一行代码就可以解决第一个问题: 1.1 根据文字长度,自适应标签宽度 解决方法:把width的设置删掉,加一行代码 display:table; .tag-footdetail{ /*widt ...
- HDU-1134 卡特兰数+java大数模板
题意: 给你一个n,然后1,2,3...2n-1,2n围一圈,让每个数都能用一条线配对并且线与线之间不能交叉,问有几种方法数. 思路: 1 可以和2,4,6...连接.假如 一共有8个数,1和2连 ...
- 博弈论题目总结(二)——SG组合游戏及变形
SG函数 为了更一般化博弈问题,我们引入SG函数 SG函数有如下性质: 1.如果某个状态SG函数值为0,则它后继的每个状态SG函数值都不为0 2.如果某个状态SG函数值不为0,则它至少存在一个后继的状 ...
- Vue主要原理最简实现与逻辑梳理
Vue的主要原理中主要用到了定义的这么几个函数Dep,Watcher,observer.我们来使用这几个函数简单的实现一下vue构造函数数据绑定和相互依赖部分,梳理一下它们之间的关系.省略了编译部分和 ...
- echarts常用实例
1.柱状图: 1.需要动态加载的参数是x轴以及柱状图的数值,legendData和seriesData.demo使用是可以直接写死参数,在执行this.initChart()方法即可.具体代码可以参数 ...
- 在MySQL的表中增加一列
MySql中增加一列 如果想在一个已经建好的表中添加一列,可以用: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(45) not ...