(8)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot网关(Api GateWay)

简介: 说到现在现有微服务的几点不足: 1) 对于在微服务体系中、和 Consul 通讯的微服务来讲,使用服务名即可访问。但是对于手 机、web 端等外部访问者仍然需要和 N 多服务器交互,需要记忆他们的服务器地址、端 口号等。

说到现在现有微服务的几点不足:

1) 对于在微服务体系中、和 Consul 通讯的微服务来讲,使用服务名即可访问。但是对于手 机、web 端等外部访问者仍然需要和 N 多服务器交互,需要记忆他们的服务器地址、端 口号等。一旦内部发生修改,很麻烦,而且有时候内部服务器是不希望外界直接访问的。

2) 各个业务系统的人无法自由的维护自己负责的服务器;

3) 现有的微服务都是“我家大门常打开”,没有做权限校验。如果把权限校验代码写到每 个微服务上,那么开发工作量太大。

4) 很难做限流、收费等。


ocelot 中文文档:https://blog.csdn.net/sD7O95O/article/details/79623654

资料:http://www.csharpkit.com/apigateway.html

官网:https://github.com/ThreeMammals/Ocelot

腾讯.Net 大队长“张善友”是项目主力开发人员之一。

一、 Ocelot 基本配置

Ocelot 就是一个提供了请求路由、安全验证等功能的 API 网关微服务。

建一个空的 asp.net core 项目。

Install-Package Ocelot

项目根目录下创建 configuration.json

ReRoutes 下就是多个路由规则

{
    "ReRoutes": [
        {
            "DownstreamPathTemplate": "/api/{url}",
            "DownstreamScheme": "http",
            "DownstreamHostAndPorts": [
                {
                    "Host": "localhost",
                    "Port": 5001
                }
            ],
            "UpstreamPathTemplate": "/MsgService/{url}",
            "UpstreamHttpMethod": [
                "Get",
                "Post"
            ]
        },
        {
            "DownstreamPathTemplate": "/api/{url}",
            "DownstreamScheme": "http",
            "DownstreamHostAndPorts": [
                {
                    "Host": "localhost",
                    "Port": 5003
                }
            ],
            "UpstreamPathTemplate": "/ProductService/{url}",
            "UpstreamHttpMethod": [
                "Get",
                "Post"
            ]
        }
    ]
}

 

Program.cs的CreateWebHostBuilder中

//在原基础上添加上这俩行
//只是监听这个端口 你自己配置也可以
.UseUrls("http://127.0.0.1:8888")
.ConfigureAppConfiguration((hostingContext, builder) => { builder.AddJsonFile("configuration.json", false, true); })

在ConfigureAppConfiguration 中AddJsonFile是解析json配置文件的方法。

为了确保直接在bin 下直接dotnet运行的时候能找到配置文件,所以要在vs中把配置文件的【复制到输出目录】设置为【如 果如果较新则复制】。

 

Startup.cs中 通过构造函数注入一个 private IConfiguration Configuration;

public void ConfigureServices(IServiceCollection services)
{
    services.AddOcelot(Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseOcelot().Wait();//不要忘了写Wait
}

这样当访问http://127.0.0.1:8888/MsgService/Send?msg=aaa的时候就会访问 http://127.0.0.1:5002/api/email/Send?msg=aaa

configuration.json中UpstreamHttpMethod表示对什么样的请求类型做转发。

二、 Ocelot+Consul

上面的配置还是把服务的ip地址写死了,Ocelot可以和Consul通讯,通过服务名字来配置。

只要改配置文件即可

{
    "ReRoutes": [
        {
            "DownstreamPathTemplate": "/api/{url}",
            "DownstreamScheme": "http",
            "UpstreamPathTemplate": "/MsgService/{url}",
            "UpstreamHttpMethod": [
                "Get",
                "Post"
            ],
            "ServiceName": "MsgService", //服务名字
            "LoadBalancerOptions": {
                "Type": "RoundRobin" //指定一个负载均衡算法:  LeastConnection 最少的连接     RoundRobin 轮训
            },
            "UseServiceDiscovery": true //使用服务发现
        }
    ],
        "GlobalConfiguration": {  //全局配置
        "ServiceDiscoveryProvider": {  //连接这台Consul服务器
            "Host": "localhost",
                "Port": 8500
        }
    }
}

有多个服务就 ReRoutes 下面配置多组即可

 访问 http://localhost:8888/MsgService/SMS/Send_MI 即可,请求报文体

{phoneNum:"110",msg:"aaaaaaaaaaaaa"}。

 表示只要是/MsgService/开头的都会转给后端的服务名为" MsgService "的一台服务器,转发的路径是"/api/{url}"。

LoadBalancerOptions 中"LeastConnection"表示负载均衡算法是“选择当前最少连接数的服务器”,如果改为 RoundRobin 就是“轮询”。

ServiceDiscoveryProvider 是 Consul 服务器的配置。

Ocelot 因为是流量中枢,也是可以做集群的。

 

 (*) 也 支 持 Eureka 进 行 服 务 的 注 册 、 查 找

(http://ocelot.readthedocs.io/en/latest/features/servicediscovery.html),也支持访问 Service Fabric 中的服务(http://ocelot.readthedocs.io/en/latest/features/servicefabric.html)。

三、Ocelot 其他功能简单介绍

1、  限流:

文档:http://ocelot.readthedocs.io/en/latest/features/ratelimiting.html 需要和 Identity Server 一起使用,其他的限速是针对 clientId 限速,而不是针对 ip 限速。比如我调用微博的api开发了一个如鹏版新浪微博,我的 clientid 是 rpwb,然后限制了 1 秒钟只能调用 1000 次,那么所有用如鹏版微博这个 app 的所有用户加在一起,在一秒钟之内,不能累计超过 1000 次。目前开放式 api 的限流都是这个套路。

如果要做针对 ip 的限速等,要自己在 Ocelot 前面架设 Nginx 来实现。

2、  请求缓存

http://ocelot.readthedocs.io/en/latest/features/caching.html 只支持 get,只要 url 不变,就会缓存。

3、  QOS(熔断器)

http://ocelot.readthedocs.io/en/latest/features/qualityofservice.html

 

注:此文章是我看杨中科老师的.Net Core微服务第二版和.Net Core微服务第二版课件整理出来的

现在的努力只是为了更好的将来,将来你一定不会后悔你现在的努力。一起加油吧!!!
C#/.NetCore技术交流群:608188505  欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
人工智能 安全 API
Agent 工程师绕不开的必修课:API 网关 vs API 管理
本文探讨了“API管理”与“API网关”的起源、发展及差异,二者分别服务于API生命周期的不同阶段。API网关从流量网关演进至AI网关,承担运行时请求控制;API管理则从接口文档化发展到商业化平台,关注全生命周期治理。两者在实际应用中协同工作,通过分层架构和策略联动实现高效运营。未来,随着大模型应用的兴起,AI网关和MCP Server管理将成为新趋势,推动API技术迈入智能化和服务化的新阶段。
Agent 工程师绕不开的必修课:API 网关 vs API 管理
|
监控 Cloud Native 安全
基于 API 网关践行 API First 开发实践
API First 开发模式的核心在于:以 API 为先,将其视为“头等公民”,在构建应用、服务及集成之前,应优先定义并设计 API 及其配套。API First 作为一种相对较新的开发模式,它已逐渐流行并获得业内的广泛认可。
790 169
|
人工智能 监控 负载均衡
一文详述:AI 网关与 API 网关到底有什么区别?
近年来,AI发展迅猛,大模型成为推动业务创新的关键力量。企业面临如何安全管理和部署AI应用的挑战,需设计既能满足当前需求又可适应未来发展的基础架构。AI网关应运而生,在集成、管理和优化AI应用中扮演重要角色。本文探讨AI网关与API网关的区别,分析AI系统为何需要专门网关,并提供选择合适AI网关的建议。AI网关不仅支持多种模型,还具备高级安全性和性能优化功能,有助于企业在复杂环境中灵活应用AI技术。
1077 2
|
负载均衡 监控 API
dotnet微服务之API网关Ocelot
Ocelot 是一个基于 .NET 的 API 网关,适用于微服务架构。本文介绍了如何创建一个 Web API 项目并使用 Ocelot 进行 API 请求路由、负载均衡等。通过配置 `ocelot.json` 和修改 `Program.cs`,实现对 `GoodApi` 和 `OrderApi` 两个项目的路由管理。最终,通过访问 `https://localhost:7122/good/Hello` 和 `https://localhost:7122/order/Hello` 验证配置成功。
486 1
dotnet微服务之API网关Ocelot
|
API Docker 微服务
Ocelot集成Consul实现api网关与服务发现
本文介绍了如何在.NET微服务架构中集成API网关Ocelot和Consul服务发现。首先通过Docker安装并配置Consul,接着在GoodApi项目中实现服务的自动注册与注销,并配置健康检查。然后,通过修改Ocelot的配置文件`ocelot.json`和`Program.cs`,实现基于Consul的服务发现,确保API请求能够正确路由到后端服务。最后,解决了服务解析时可能出现的问题,确保服务的IP地址而非节点名称被正确解析。
537 0
Ocelot集成Consul实现api网关与服务发现
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
1084 5
|
负载均衡 安全 Java
微服务 Gateway 使用详解
网关(Gateway)是连接不同网络并进行数据转发的关键组件。在互联网中,路由器常作为默认网关;在现代操作系统中,网关指本地网络上转发数据包的设备。Spring Cloud Gateway是一款基于Spring Framework的API网关,具备反向代理、高性能、负载均衡、安全控制、限流熔断、日志监控等功能。通过简单配置即可实现请求路由和转发,适用于微服务架构中的集中控制、解耦客户端与服务、自动服务发现等场景,提升系统安全性与可扩展性。
2275 4
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
893 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
469 1