Nacos的安装与配置
Spring Cloud集成Nacos作为注册中心
LoadBalacer集成Nacos实现负载均衡
常见的负载均衡策略分析
Spring Cloud集成Dubbo实现RPC调用
SpringCloud集成Nacos作为配置中心
Nacos整合OpenFegin实现RPC调用
前面我们已经介绍了Nacos
的安装与配置,Spring Cloud
集成Nacos
作为服务的注册中心和配置中心,集成Nacos
实现服务的负载均衡和一些常见的负载均衡策略以及使用Dubbo、OpenFegin进行RPC调用
接下来让我们一起来看看Spring Cloud另一大组件:Spring Cloud Gateway
我们知道在微服务架构中,大型服务都被拆分成了独立的微服务,每个微服务通常会以RESTFUL API的形式对外提供服务。但是在UI方面,我们可能需要在一个页面上显示来自不同微服务的数据,此时就会需要一个统一的入口来进行API的调用。API 网关就在此场景下充当了多个服务的大门,系统的统一入口,从面向对象设计的角度看,它与外观模式类似,API 网关封装了系统的内部复杂结构,同时它还可能具有其他API管理/调用的通用功能,如认证,限流,流控等功能。
网关作为系统的唯一入口,也就是说,进入系统的所有请求都需要经过 API 网关。
当系统外部的应用或者客户端访问系统的时候,都会遇到这样的情况:
也就是说,只要是涉及到对系统的请求,并且能够从业务中抽离出来的功能,都有可能在网关上实现。
例如:协议转换,负载均衡,请求路由,流量控制等等。
Spring Cloud全家桶中有一个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关。但是在2.x版本中,Zuul的升级一直跳票,迟迟不发布,Spring Cloud最后自己研发了一个网关替代Zuul,就是Gateway
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,基于Spring 5.0 + Spring Boot 2.0 和 Project Reactor 等技术开发的网关。它不能在传统的 Servlet 容器中工作,也不能构建成 war 包。它旨在为微服务架构提供一种简单有效的统一的API路由管理方式
Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本。而为了提升网关的性能,Spring Cloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty
Spring Cloud Gateway的目标是 提供统一的路由方式且基于 Filter链 的方式提供了网关基本的功能,例如:安全、监控/指标、限流
Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等。
Spring Cloud Gateway 具有如下特性:
客户端向 Spring Cloud Gateway 发出请求。 如果网关处理程序映射确定请求与路由匹配,则将其发送到网关 Web 处理程序。 此处理程序通过特定于请求的过滤器链运行请求。 过滤器用虚线划分的原因是过滤器可以在发送代理请求之前和之后运行逻辑。 执行所有“预”过滤器逻辑。 然后发出代理请求。 发出代理请求后,将运行“发布”过滤器逻辑。
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webfluxartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
如果对Nacos配置中心不是很熟悉,请参见:SpringCloud集成Nacos作为配置中心
编写bootstrap.yml
,主要是对Nacos配置中心的一些设置
spring:
application:
name: gateway-service
cloud:
nacos:
discovery:
server-addr: 192.168.199.128:8848 #Nacos地址
config:
server-addr: 192.168.199.128:8848 #Nacos地址
file-extension: yaml #这里我们获取的yaml格式的配置
application.yml
,启用对应环境server:
port: 80
spring:
profiles:
active: dev
gateway-service-dev.yaml
service-url:
user-service: http://localhost:8080
spring:
cloud:
gateway:
# 全局的过滤器,跨域配置
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_UNIQUE
globalcors:
cors-configurations:
'[/**]':
allowedHeaders: '*'
allowedMethods: '*'
allowedOrigins: '*'
# 静态路由
routes:
- id: path_route
uri: ${service-url.user-service}/user/get/{id}
predicates:
- Path=/user/get/{id}
datasource:
type: com.alibaba.druid.pool.DruidDataSource #数据源,这里用的Druid
driver-class-name: com.mysql.cj.jdbc.Driver #驱动
url: jdbc:mysql://192.168.199.128:3306/cloud_learn?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root #数据库用户名
password: 123456 #密码
cache:
type: redis
redis:
host: 192.168.199.128
port: 6379
password: 123456
management:
endpoints:
web:
exposure:
include: "*"
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:cuit/epoch/pymjl/mapper/xml/*.xml
type-aliases-package: cuit.epoch.pymjl.entity
启动对应的服务以及网关,如图所示,user-service和gateway-service都已经启动成功
访问接口进行测试
从图中可以看到,我们访问网关的请求,网关根据对应的路由规则对我们的请求进行了转发
至此,Nacos整合Spring Cloud Gateway就演示到这里了,但是Spring Cloud Gateway远远不止于此,关于它的一些特性我们后面会介绍到,今天先到这里吧
项目源码:gitee github
据对应的路由规则对我们的请求进行了转发
至此,Nacos整合Spring Cloud Gateway就演示到这里了,但是Spring Cloud Gateway远远不止于此,关于它的一些特性我们后面会介绍到,今天先到这里吧
项目源码:gitee github