API 网关是系统的唯一入口,调用任何服务的请求都需要经过网关层,最终才可能到达目标服务,既然是必经之路,那我们可以在网关层进行一些通用的操作,如:认证、鉴权、限流、智能路由、缓存、日志、监控、超时、熔断、重试等等,这样既使整个框架条理清晰,也让开发者更多注重功能的逻辑实现。

常见的 API 网关项目有:KongTykNetflix zuulOcelot 等。在 Spring Cloud 中,Zuul 是其核心组件,下面将介绍 .NET Core 中通过 Zuul 来进行统一 API 调用。

搭建 Zuul Server

Eureka Server 的搭建请参考 .NET Core + Spring Cloud:服务注册与发现

  1. 在 IntelliJ IDEA 中新建项目,选 Spring Initializr 完成项目创建

  2. 在 pom.xml 添加 zuul 和 eureka-client  的依赖,我们将会把 Zuul Server 注册到 Eureka Server

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  3. 在启动类上添加 EnableZuulProxy 注解

    @EnableZuulProxy
    @SpringBootApplication
    public class EurekaServiceApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceApplication.class, args);}
    }
    
  4. 修改 application.yml 配置文件(集群模式通过一个类似 gateway.xxx.com 的域名指向多个 Zuul  Server 实例即可

    spring:application:name: zuul-serviceserver:port: 5555eureka:instance:hostname: server1# 超过这个时间没收到心跳就剔除这个服务,这个配置一般为服务刷新时间配置的三倍,默认90slease-expiration-duration-in-seconds: 15# 服务刷新时间,默认30slease-renewal-interval-in-seconds: 5client:service-url:defaultZone: http://server1:8001/eureka/,http://server2:8002/eureka/,http://server3:8003/eureka/
    
  5. 启动服务,访问:http://server1:8001/(请确保 Eureka Server 已启动),可以发现 Zuul Server 已在 5555 端口启动

创建 .NET Core 服务

这里直接基于文章 .NET Core + Spring Cloud:服务注册与发现 中的测试项目,修改 .NET Core 客户端服务的配置文件 services:base-service:url

"services": {"base-service": {"url": "http://server1:5555/base-service/" // 原来 http://base-service/}
}

因为我们的 Zuul Server 是启动在 server1 的 5555 端口,通过 Zuul 网关调用服务的路由规则是 http://server1:5555/ + {Application 小写},而基础服务的 Application名称为 BASE-SERVICE,所以 url 设置为 http://server1:5555/base-service/

测试

访问 base-service

通过网关的路由地址 http://server1:5555/base-service/ 访问 api/values 接口,多次请求可测试负载均衡效果

访问 client-service

通过网关的路由地址 http://server1:5555/client-service/ 访问 api/values 接口,而配置文件中的 base-service 设置的也是网关地址,所以实际在调用 base-service 也是通过网关

.NET Core + Spring Cloud:API 网关相关推荐

  1. Spring Cloud——API网关服务:Spring Cloud Zuul

    API网关像是整个微服务框架系统的门面一样,所有的客户端访问都需要经过它来进行调度和过滤.它实现了请求路由.负载均衡.校验过滤等功能.zuul包含了hystrix.ribbon.acturator等重 ...

  2. spring cloud API网关

    为什么? 微服务有很多,比如 购物车服务 订单服务 目录服务:商品基本信息 评论服务 库存服务 送货服务 推荐服务 等等, 如果客户端(前端)调用相关服务时,就必须知道每个微服务的ip,端口,微服务的 ...

  3. .NET Core + Ocelot:API 网关

    关于 API 网关的作用,核心是 API 请求的收口及控制,如:鉴权.限流.熔断.数据缓存 等都是开发中常见的需求,将此类需求交给网关层处理,可以使每个微服务更聚焦于业务功能开发,同时也可为下游服务的 ...

  4. Spring Cloud Gateway网关

    Spring Cloud Gateway网关 1. 简介 Spring Cloud Gateway是Spring官网基于Spring 5.0. Spring Boot 2.0.Project Reac ...

  5. Spring Cloud Gateway网关实现短网址生成、解析、转发

    Spring Cloud Gateway网关实现短网址生成.解析.转发 1.概述 2.基础实现 3.路由处理HandlerFunction 4.配置路由 5.测试 1.概述 在一些生成二维码等场景中, ...

  6. Spring Cloud服务网关(Zuul)的配置项sensitiveHeaders

    如果我们在一个服务中添加了Cookie,如下图所示: public static void set(HttpServletResponse response,String name,String va ...

  7. 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析

    API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...

  8. Spring Cloud Gateway — 网关基本功能API暴露

    API网关 API网关是一种设计模式,一种在微服务体系下的经典构件.要了解最新API网关模式可以参考敖小剑写的<Service Mesh和Api Gateway关系深度探讨> 早期SOA阶 ...

  9. .NET Core + Spring Cloud:服务注册与发现

    毫无疑问,微服务架构是目前的主流,在微服务架构下,服务治理.负载均衡.服务熔断.配置中心.API网关 等都是需要关注的问题,当然不是非要全部完善后才能进行微服务开发,在很多项目团队中,初期可能会将某个 ...

最新文章

  1. Oracle 12c 新特性之 temp undo
  2. MySQL最高每秒57万写入,带你装X,带你飞!
  3. Vue访问百度音乐API实现播放时no-referrer-when-downgrade
  4. 【Python】分享几个用Python给图片添加水印的方法,简单实用
  5. C++Pascal‘s Triangle杨辉三角的实现算法
  6. linux内核2018,CVE-2018-1000001 linux kernel
  7. python都有什么包_常用的Python包有哪些,如何快速掌握Python编程
  8. Linux下解压缩命令
  9. oracle典型安装配置,Oracle的安装配置一些有关问题
  10. 多个网站被挂菠菜黑链
  11. 基于Vue实现的魔方矩阵排列效果
  12. 中兴机顶盒网关服务器地址,中兴全球首发高清双向网关型DVB机顶盒
  13. 概率论基础知识(二) 随机变量及其分布
  14. 预约上门App平台的接单方式
  15. MYSQL之索引详谈(三种介绍方式)
  16. 全球及中国合成色素行业发展前景与投资趋势分析报告2022-2028年
  17. has been blocked by CORS policy: Response to preflight request doesn‘t pass access control
  18. DataStage学习笔记
  19. MVC模式的中国快递物流网站建设,JSP源码下载
  20. 高阶数据结构之哈希的应用

热门文章

  1. html标记语言 --框架
  2. vi 编辑器跳转到指定行数
  3. Linux操作系统备份之二:通过tar拷贝分区实现Linux操作数据的在线备份
  4. Centos6.8 安装spark-2.3.1 以及 scala-2.12.2
  5. 常见的js算法面试题收集,es6实现
  6. 脚本进阶,函数调用实例练习
  7. 用GCD线程组与GCD信号量将异步线程转换为同步线程
  8. ADO.NET笔记——基本概念
  9. 操作分布式文件之三:如何访问和操作远程文件
  10. ubuntu下mysql-python模块的安装