SpringCloud 微服务系列——【Gateway、Config组件使用】

这篇具有很好参考价值的文章主要介绍了SpringCloud 微服务系列——【Gateway、Config组件使用】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringCloud 微服务系列——【Gateway、Config组件使用】

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SpringCloud 微服务学习专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:SpringCloud 微服务系列——【Gateway、Config组件使用】

SpringCloud 微服务系列——【Gateway、Config组件使用】

Gateway组件使用

什么是服务网关

网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。

  • 网关 = 路由转发 + 过滤器+负载均衡
    路由转发:接收一切外界请求,转发到后端的微服务上去
  • 网关组件在微服务中架构

SpringCloud 微服务系列——【Gateway、Config组件使用】

zuul 1.x 2.x(netflix 组件)

Zuul is the front door for all requests from devices and web sites to the backend of the Netflix streaming application. As an edge service application, Zuul is built to enable dynamic routing, monitoring, resiliency and security.

zul是从设备和网站到Netflix流媒体应用程序后端的所有请求的前门。作为一个边缘服务应用程序,zul被构建为支持动态路由、监视、弹性和安全性

zuul版本说明

  • 目前zuul组件已经从1.0更新到2.0,但是作为springcloud官方不再推荐使用zuul2.0,但是依然支持zuul2

gateway (spring)

This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.

- 这个项目提供了一个在springmvc之上构建API网关的库。springcloudgateway旨在提
供一种简单而有效的方法来路由到api,并为api提供横切关注点,比如:安全性、监控/度
量和弹性。

# 1.特性
- 基于springboot2.x 和 spring webFlux 和 Reactor 构建 响应式异步非阻塞IO模
型
- 动态路由
- 请求过滤

开发网关动态路由

网关配置有两种方式

  • 一种是快捷方式(Java代码编写网关)
  • 一种是完全展开方式(配置文件方式)[推荐]

1.创建项目引入网关依赖

<!--引入gateway网关依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

快捷方式配置路由

编写网关配置

server:
  port: 9999
spring:
  application:
    name: GATEWAY
  cloud:
    consul:
      host: localhost
      port: 8500
    gateway:
      routes:
        - id: category_router #路由唯一标识
          uri: http://localhost:9090 #路由转发地址
          predicates:
            - Path=/cat1

        - id: priducts_router #路由唯一标识
          uri: http://localhost:8787 #路由转发地址
          predicates:
            - Path=/p1    #/p1 ,/p2 ,/p3 多个路径映射
            
 ---------------------------------------------------------------------------
         - id: priducts_router #路由唯一标识
           uri: http://localhost:8787 #路由转发地址
           predicates:
             - Path=/p/**

启动gateway网关项目

  • 直接启动报错:

SpringCloud 微服务系列——【Gateway、Config组件使用】

在启动日志中发现,gateway为了效率使用webflux进行异步非阻塞模型的实现,因此和原来的web包冲突,去掉原来的web即可

SpringCloud 微服务系列——【Gateway、Config组件使用】

再次启动成功启动

SpringCloud 微服务系列——【Gateway、Config组件使用】

测试网关路由转发

  • 测试通过网关访问目录服务: http://localhost:9999/cat1
  • 测试通过网关访问商品服务: http://localhost:9999/p1

java方式配置路由

官网:https://spring.io/projects/spring-cloud-gateway

SpringCloud 微服务系列——【Gateway、Config组件使用】

@Configuration
public class GateWayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return  builder.routes()
                .route("category_router",r->r.path("/cat1")
                        .uri("http://localhost:9090"))
                .route("product_router",r->r.path("/p1")
                        .uri("http://localhost:8787"))
                .build();
    }
}

查看网关路由规则列表

gateway提供路由访问规则列表的web界面,但是默认是关闭的,如果想要查看服务路由规则可以在配置文件中开启

management:
  endpoints:
    web:
      exposure:
        include: "*"   #开启所有web端点暴露
- 访问路由管理列表地址
- http://localhost:8989/actuator/gateway/routes

配置路由服务负载均衡

spring:
  application:
    name: gateway
  cloud:
    consul:
      host: localhost
      port: 8500
    gateway:
      routes:
         - id: priducts_router #路由唯一标识
          uri: lb://PRODUCTS
          predicates:
            - Path=/p/**
            
      discovery:
        locator:
          enabled: true 			#开启根据服务名动态获取路由

常用路由predicate(断言,验证)

Gateway支持多种方式的predicate

SpringCloud 微服务系列——【Gateway、Config组件使用】

- After=2023-01-06T11:32:53.698+08:00[Asia/Shanghai]`指定日期之后的请求进行路由

- Before=2021-12-25T23:29:38.905+08:00[Asia/Shanghai]指定日期之前的请求进行路由

- Between=2021-12-25T23:29:38.905+08:00[Asia/Shanghai], 2021-12-27T23:29:38.905+08:00[Asia/Shanghai]
- Cookie=username,mosin					    基于指定cookie的请求进行路由
- Cookie=username,[A-Za-z0-9]+				基于指定cookie的请求进行路由	
curl http://localhost:8989/user/findAll --cookie "username=zhangsna"
- Header=X-Request-Id, \d ``基于请求头中的指定属性的正则匹配路由(这里全是整数)
curl http://localhost:8989/user/findAll -H "X-Request-Id:11"
- Method=GET,POST		 		基于指定的请求方式请求进行路由

常用的Filter以及自定义filter

Route filters allow the modification of the incoming HTTP request or outgoing HTTP response in some manner. Route filters are scoped to a particular route. Spring Cloud Gateway includes many built-in GatewayFilter Factories.

官网: https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.3.RELEASE/reference/html/#gatewayfilter-factories

  • 路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由筛选器的作用域是特定路由。springcloudgateway包括许多内置的GatewayFilter工厂。

  • 作用

    当我们有很多个服务时,比如下图中的user-service、order-service、product-service等服务,客户端请求各个服务的Api时,每个服务都需要做相同的事情,比如鉴权、限流、日志输出等。

SpringCloud 微服务系列——【Gateway、Config组件使用】

SpringCloud 微服务系列——【Gateway、Config组件使用】

使用内置过滤器

SpringCloud 微服务系列——【Gateway、Config组件使用】

 filters:
    - AddRequestHeader=user_name, mosin				增加请求头的filter`
    - AddRequestParameter=color, blue				    增加请求参数的filterr`
    - AddResponseHeader=X-Response-Red, AAA				增加响应头filter`
    - PrefixPath=/emp									增加前缀的filter`
    - StripPrefix=2										去掉前缀的filter`

Config组件使用

什么是Config

config(配置)又称为 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护。

统一配置中心组件流程图

SpringCloud 微服务系列——【Gateway、Config组件使用】

Config Server 开发

1.引入依赖

<!--引入统一配置中心-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2.开启统一配置中心服务

@SpringBootApplication
@EnableConfigServer
public class ConfigserverApplication {
	public static void main(String[] args) {
		SpringApplication.run(Configserver7878Application.class, args);
	}
}

3.修改配置文件

server:
  port: 8848
spring:
  application:
    name: CONFIGSERVER
  cloud:
    consul:
      port: 8500
      host: 127.0.0.1

4.直接启动服务报错

SpringCloud 微服务系列——【Gateway、Config组件使用】

没有指定远程仓库的相关配置

5.创建远程仓库

SpringCloud 微服务系列——【Gateway、Config组件使用】

6.复制仓库地址

SpringCloud 微服务系列——【Gateway、Config组件使用】

7.在统一配置中心服务中修改配置文件指向远程仓库地址

spring:
  cloud:
    config:
          server:
            git:
              uri: https://gitee.com/classmeng/config.git # 配置远程仓库的地址
             # username:
             # password:   私有仓库需要设置用户名和密码
            default-label: master  #配置分支

8.再次启动统一配置中心

9.拉取远端配置 [三种方式][]

    1. http://localhost:8848/configclient-xxx.yml
    1. http://localhost:7878/test-xxxx.json
    1. http://localhost:7878/test-xxxx.yml

Config Client 开发

1.引入依赖

<!--引入config client-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

2.修改配置文件

spring:
  cloud:
    config:
      discovery:
        enabled: true   #开启根据服务id 获取configServer ip地址
        service-id: CONFIGSERVER
      label: master   #分支
      name: configclient  #文件的名字
      profile: dev   #配置环境  哪个文件生效
    consul:
      port: 8500
      host: localhost

3.启动报错

SpringCloud 微服务系列——【Gateway、Config组件使用】

SpringCloud 微服务系列——【Gateway、Config组件使用】

原因分析

项目中目前使用的是application.yml启动项目,使用这个配置文件在springboot项目启动过程中不会等待远程配置拉取,直接根据配置文件中内容启动,因此当需要注册中心,服务端口等信息时,远程配置还没有拉取到,所以直接报错

SpringCloud 微服务系列——【Gateway、Config组件使用】

解决方案

应该在项目启动时先等待拉取远程配置,拉取远程配置成功之后再根据远程配置信息启动即可,为了完成上述要求springboot官方提供了一种解决方案,就是在使用统一配置中心时应该将微服务的配置文件名修改为bootstrap.(properties|yml),bootstrap.properties作为配置启动项目时,会优先拉取远程配置,远程配置拉取成功之后根据远程配置启动当前应用

SpringCloud 微服务系列——【Gateway、Config组件使用】

再次启动服务

SpringCloud 微服务系列——【Gateway、Config组件使用】

SpringCloud 微服务系列——【Gateway、Config组件使用】

手动配置刷新

在生产环境中,微服务可能非常多,每次修改完远端配置之后,不可能对所有服务进行重新启动,这个时候需要让修改配置的服务能够刷新远端修改之后的配置,从而不要每次重启服务才能生效,进一步提高微服务系统的维护效率。在springcloud中也为我们提供了手动刷新配置和自动刷新配置两种策略,这里我们先使用手动配置文件刷新。

在config client端加入刷新暴露端点

management.endpoints.web.exposure.include=*          #开启所有web端点暴露
-----------------------------------yml--------------------------------------
management:
  endpoints:
    web:
      exposure:
        include: "*"

SpringCloud 微服务系列——【Gateway、Config组件使用】

在需要刷新代码的类中加入刷新配置的注解

@RestController
@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)  //不重启服务实现数据的刷新
public class ConfigController {
    Logger logger = LoggerFactory.getLogger(getClass());
    @Value("${name}")
    private  String name;

    @GetMapping("/demo")
    public String demo01(){
        logger.info("name{}",name);
        return "configClient ok:"+name;
    }
}

修改之后在访问

  • 发现并没有自动刷新配置?
  • 必须调用刷新配置接口才能刷新配置

手动调用刷新配置接口

POST http://localhost:8999/actuator/refresh  #向当前微服务发送post请求 刷新数据

curl -X POST http://localhost:8889/actuator/refresh

SpringCloud 微服务系列——【Gateway、Config组件使用】

SpringCloud 微服务系列——【Gateway、Config组件使用】


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

SpringCloud 微服务系列——【Gateway、Config组件使用】文章来源地址https://www.toymoban.com/news/detail-441024.html

到了这里,关于SpringCloud 微服务系列——【Gateway、Config组件使用】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)

    在业务微服务中通过工具类获取当前用户信息 网关微服务(Gateway)往业务微服务传递用户信息 业务微服务之间通过OpenFeign传递用户信息 只要把上面两处打通,然后业务微服务在通过拦截器获取到用户信息,之后再将用户信息存在ThreadLocal中,这样我们就可以实现在业务微服

    2024年02月13日
    浏览(53)
  • Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳转 Java之SpringCloud Alibaba【二】【微服务调用组件Feign】 跳转 Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】 跳转 Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 跳转 Java之SpringCloud Alibaba【五】【微服务

    2024年02月06日
    浏览(60)
  • 【SpringCloud Alibaba】Nacos Config配置管理与Gateway 网关

    目录 一、Config 远程配置 1.1 config 介绍 1.2 bootstrap.yml 配置文件 二、Gateway 网关 2.1 gateway 介绍 2.2 gateway 使用 2.2.1 方式一 2.2.2 方式二(动态路由)         微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。

    2024年02月02日
    浏览(57)
  • 【springcloud 微服务】Spring Cloud 微服务网关Gateway使用详解

    目录 一、微服务网关简介 1.1 网关的作用 1.2 常用网关 1.2.1 传统网关 1.2.2 云原生网关

    2023年04月16日
    浏览(50)
  • 【SpringCloud】11、Spring Cloud Gateway使用Sentinel实现服务限流

    1、关于 Sentinel Sentinel 是阿里巴巴开源的一个流量防卫防护组件,可以为微服务架构提供强大的流量防卫能力,包括流量控制、熔断降级等功能。Spring Cloud Gateway 与 Sentinel 结合,可以实现强大的限流功能。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近

    2024年02月01日
    浏览(55)
  • Springcloud 之Gateway组件详解

      目录 1.网关 1.1 网关简介 1.2 网关组件 1.2.1 Gateway介绍 1.2.2 Gateway实践 1.2.3 Gateway执行流程 1.2.4 断言工厂 1.2.5 过滤器   大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户

    2024年02月03日
    浏览(31)
  • SpringCloud之Gateway组件简介

    网关的理解 网关类似于 海关 或者 大门 , 出入都需要经过这个网关 。别人不经过这个网关,永远也看不到里面的东西。可以在网关进行 条件过滤 ,比如大门只有对应的钥匙才能入内。网关和大门一样,永远暴露在最外面 不使用网关 前端需要记住每一个服务的IP和port 如果

    2023年04月19日
    浏览(28)
  • SpringCloud之网关组件Gateway学习

    Spring Cloud Gateway是Spring Cloud的⼀个全新项目,目标是取代Netflix Zuul,它基于Spring5.0+SpringBoot2.0+WebFlux(基于高性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官方测试,Gateway是Zuul的1.6倍,旨在为微服务架构提供种简单有效的统⼀的API路由管

    2024年03月24日
    浏览(42)
  • SpringCloud网关Gateway认证鉴权【SpringCloud系列7】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 本文章是系列文章中的一篇 1、SpringCloud 项目基础工程搭建 【SpringCloud系列1】 2、S

    2024年02月09日
    浏览(47)
  • SpringCloud Gateway 整合RSA对请求参数解密、响应结果加密【SpringCloud系列10】

    本文章实现的是 网关中的 参数解密、响应数据体加密功能。 1 集成 commons-codec commons-codec 是Apache开源组织提供的用于摘要运算、编码解码的包。常见的编码解码工具Base64、MD5、Hex、SHA1、DES等。 本项目中集成RSA 非对称算法,RSAUtils 工具类 然后创建一个测试类,生成一组公钥

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包