前言
书接上文,上文书说到:微服务架构概念、优缺点、划分原则以及技术选择,既然指导思想有了,那就用实践学习来检验。
一,网关API
1,何为网关API?
网关网关API——整个系统的统一入口,往上,接收一切外界请求;往下,通知内部所有服务。简单来讲就是一个“门”。
2,网关API功能作用
(1)身份认证与授权
这“家”里穷不穷富不富的先不说,有门了就不能随便让人进,这要来坏人那就得出事,所以得给门加个锁,有钥匙(token)的您里面请,没钥匙的........
当然了进来了也让人随便跑,这“二奶奶”能不能去“大奶奶”的房还得看老爷的意思,为了家里和谐还是各自回厢房歇着。
身份认证与授权:保证系统安全访问
(2)负载均衡
老爷家挺大的,一到过年过节家里客人也多;家里大少爷饱读诗书又有功名在身,平时喜好交朋友;老爷甚是喜欢老早就把东西厢房给了他;
看门的一听是找大少爷的,不是让去东厢房就是让去西厢房,把这人情事故处理的妥妥当当的。
(3)访问限流
看门的这来的人太多把门都快挤坏了,赶紧把情况报告给老爷,老爷一方面怕大少爷会客累坏身子,另一方面怕门出问题这都是事;
“今日各位朋友远道而来,令寒舍蓬荜生辉倍感荣幸,大家的热情鄙人和犬子都感受到,奈何这家小门小实在照顾不周,眼看天色也不早了,、
还请离家近的朋友把机会留给远方的朋友,远方的朋友也请你们排排队 这样也能快一点把事办了”老爷说完一拱手就见门口的情况好了很多,转身就回屋了。
......东街李员外意外路过看了十分眼红,心里暗下决定赶明照着这个给也弄一个。。。
二,Ocelot网关搭建
李员外也是实干主义的人说干就干,上到性能检查下到实施全部亲力亲为,最终综合考虑就用Ocelot
官网:https://ocelot.readthedocs.io/
1,第一步创建一个.net core web 项目
2.使用 NuGet安装Ocelot的相关组件
因为框架使用的是 .net core 3.1 所以只能安装16.0一下版本,,,
3,修改程序配置
在startup 里面添加ocelot服务
在Program 里面添加ocelot配置
ocelot.json:
{
"Routes": [
{
"DownstreamPathTemplate": "/product/{path}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 4001
},
{
"Host": "localhost",
"Port": 4002
}
],
"UpstreamPathTemplate": "/api/product/{path}",
"UpstreamHttpMethod": [
"Get",
"Post"
],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
},
{
"DownstreamPathTemplate": "/order/{path}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 4050
}
],
"UpstreamPathTemplate": "/api/order/{path}",
"UpstreamHttpMethod": [
"Get",
"Post"
],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:4000"
}
}
参数说明:
DownstreamPathTemplate:下游具体服务地址,{path}占位变量,"path"可以是其他字符支持自定义
DownstreamScheme:下游请求方案,可以使用:http/https
DownstreamHostAndPorts:下游服务的主机和端口集合,对下游服务的请求进行负载平衡, Ocelot 允许添加多个条目,然后选择一个负载平衡器
UpstreamPathTemplate:上游路径地址,上游的路径无需和下游一致
UpstreamHttpMethod:上游接受请求方式集合:[ "Get", "Post", "Put", "Delete" ]
LoadBalancerOptions:负载均衡平衡器,4个参数可选RoundRobin - 循环访问,NoLoadBalancer - 从配置或服务发现中获取第一个可用服务,"LeastConnection" 请求最少的服务发送新请求,
CookieStickySessions - 使用 cookie 将所有请求粘贴到特定服务器
GlobalConfiguration:全局配置,BaseUrlocelot网关运行的地址
其中product 设置使用两个端4001,4002 模拟负载均衡,按上述简单配置不出问题运行效果如下:
客户端对服务的调用使用网关进行统一中转,简化客户端请求配置,服务端也做跨域也方便,避免了服务地址直接暴露
如果ocelot.json 中下游端口等其他的配置经常变化修改对整个系统并不是很友好,所以Ocelot 允许指定服务发现提供者,并将使用它来查找 Ocelot 将请求转发到的下游服务的主机和端口
下一篇 Ocelot中的服务发现、注册、健康检查以及简单的服务治理
--------to be continue --------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构