spring cloud gateway网关(一)之网关路由

这篇具有很好参考价值的文章主要介绍了spring cloud gateway网关(一)之网关路由。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、gateway相关介绍

在微服务架构中,系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务,就需要知道它们具体的地址信息,例如 IP 地址、端口号等。这种客户端直接请求服务的方式存在很多的复杂问题。如:需要维护大量的服务地址、存在跨域请求的问题、每个微服务需要独立认证等。所以我们可以通过 API 网关(gateway)来解决这些问题。所有客户端请求都发生到网关,由网关统一转发到不同的地址。网关还可以 处理一些非业务功能的逻辑,例如权限验证、监控、缓存等。本篇主要讲解通过网关统一请求转发到不同微服务。

2、创建网关服务

首先创建maven项目新建网关模块:

spring cloud gateway网关(一)之网关路由

pom导入网关相关依赖:

 <dependencies>
        <!--Eureka Client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--特别注意:在 gateway 网关服务中不能引入 spring-boot-starter-web 的依赖,否则会报错-->
        <!-- Spring cloud gateway 网关依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!-- LoadBalancer -->
<!-- 引入spring-cloud-loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--ribbon Spring Cloud Ribbon 在高版本移除了 -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->
<!-- <version>2.2.5.RELEASE</version>-->
<!-- </dependency>-->
    </dependencies>

创建springboot启动类:

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

}

启动类创建成功后,在resources资源目录下创建application.yml文件,用来配置gateway。首先设置服务端口和服务名称:

server:
  port: 8081
spring:
  application:
    name: gateway-server-one

在把网关注册到注册中心:

#客户端注册
eureka:
  instance:
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #localhost
    hostname: localhost
  client:
    register-with-eureka: true #是否向注册中心注册自己 默认为true
    fetch-registry: true  #是否需要检索服务  默认为true
    service-url:
      defaultZone: http://eternity:1234qwer@localhost:4405/eureka/

配置好之后,可以启动网关。查看网关服务是否可以正常启动以及是否在注册中心注册成功,如果注册成功然后在开始配置网关参数。

spring cloud gateway网关(一)之网关路由

可以看到服务启动成功,我们看看注册中心是否成功:

spring cloud gateway网关(一)之网关路由

eureka中心已经有了,说明启动成功。

3、配置gateway路由

spring:
  application:
    name: gateway-server-one
  cloud:
    loadbalancer:
      ribbon:
        enabled: false #使用LoadBalancer, Ribbon 在高版本移除了 切换到ReactiveLoadBalancerClientFilter
    gateway:
      discovery: 
        locator: #路由访问方式:http://Gateway_HOST:Gateway_PORT/大写的serviceId/**,其中微服务应用名默认大写访问。
          enabled: true #开启通过名称找到服务器功能
          lower-case-service-id: true #使用小写service-id
      routes:
        - id: hibernate-server-one-route #路由的ID,没有固定规则,但要求唯一,建议与服务名对应
          uri: http://localhost:8800  #匹配后提供服务的路由地址
          predicates:
            #以下是断言条件,必选全部符合条件
            - Path=/admin/user/**   #断言,路径相匹配的进行路由
            - Method=GET #只能时 GET 请求时,才能访问
        - id: xxl-job-server-one-route
#          uri: http://localhost:8801 #可以设置为服务名
          uri: lb://XXL-JOB-SERVER-MODEL #可以设置为服务名
          predicates:
            - Path=/admin/user/**   #断言,路径相匹配的进行路由, 注意:Path 中 P 为大写
            - After=2022-06-06T03:29:37.318-07:00 # [Asia/Shanghai] # after来进行设置,后面添加一个时间,就是指在什么时间之后这个服务才可以被访问,否则将无法被访问到
#            - After=2030-01-20T17:42:47.789-07:00 # [America/Denver]

配置成功后再次启动网关,查看服务器是否转发成功。

通过网关gateway请求路径访问查找用户信息:

http://localhost:8081/admin/user/

spring cloud gateway网关(一)之网关路由

通过postman测试接口,查询成功。

4、gateway负载均衡

通过在配置文件中配置路径的uri为注册中心服务器名称,可以实现gateway负载均衡。访问时通过服务名称去查找服务名下面的多个实例,根据配置的策略实现转发到不同实例服务。

 uri: lb://XXL-JOB-SERVER-MODEL #可以设置为服务名

在通过服务名称转发的过程中,有可能转发失败。报找不到服务,接口报错:

spring cloud gateway网关(一)之网关路由

查看网关控制台发现也报错:

java.net.UnknownHostException: failed to resolve 'xxl-job-server-model' after 4 queries 
    at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013) ~[netty-resolver-dns-4.1.58.Final.jar:4.1.58.Final]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
    |_ checkpoint ⇢ HTTP POST "/admin/user/" [ExceptionHandlingWebHandler]
Stack trace:
        at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013) ~[netty-resolver-dns-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:966) ~[netty-resolver-dns-4.1.58.Final.jar:4.1.58.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:414) ~[netty-resolver-dns-4.1.58.Final.jar:4.1.58.Final]

没有找到服务名,刚开始以为是设置路由的服务名和注册中心的服务名不一致。经过查找发现是一致。最后查找发现是客户端微服务注册到注册中心的hostname配置错误,需要配置和注册中心一致的hostname。不然网关通过服务名找不到相关地址:

spring cloud gateway网关(一)之网关路由

查看eureka服务注册地址:

spring cloud gateway网关(一)之网关路由

所以需要配置客户端hostname:

hostname: localhost

再次重新运行系统,发现报错问题已经解决。

 文章来源地址https://www.toymoban.com/news/detail-474499.html

到了这里,关于spring cloud gateway网关(一)之网关路由的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【深入解析spring cloud gateway】02 网关路由断言

    断言是路由配置的一部分,当断言条件满足,即执行Filter的逻辑,如下例所示 当请求路径满足条件/red/,即添加头信息:X-Request-Red,value为Blue-{segment},segment是路径里面带的信息。 gateWay的主要功能之一是转发请求,转发规则的定义主要包含三个部分 Route(路由) 路由是网关

    2024年02月09日
    浏览(31)
  • 第七章 : Spring cloud 网关中心 Gateway (静态路由)

    第七章 : Spring cloud 网关中心 Gateway (静态路由) 前言 本章知识点:本章将会介绍什么是Spring Cloud Gateway、为什么会出现Spring Cloud Gateway,以及Spring Cloud Gateway的工作原理和实战用法,以及Spring Cloud Gateway 路由概念以及基于nacos注册中心Spring Cloud Gateway 静态路由的实战。 什么

    2024年02月02日
    浏览(45)
  • Spring Cloud Gateway 服务网关的部署与使用详细介绍

    1、什么是服务网关:         传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工

    2024年02月02日
    浏览(33)
  • SpringCloud - Spring Cloud 之 Gateway网关,Route路由,Predicate 谓词/断言,Filter 过滤器(十三)

    阅读本文前可先参考 ​​​​​​SpringCloud - Spring Cloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客 SpringCloud - Spring Cloud 之 Gateway网关(十三)_MinggeQingchun的博客-CSDN博客 Web 有三大组件(监听器 过滤器 servlet),Spring Cloud GateWay 最主要的功能就是路由转发,而在定义

    2024年02月14日
    浏览(55)
  • 【Spring Cloud 八】Spring Cloud Gateway网关

    【Spring Cloud一】微服务基本知识 【Spring Cloud 三】Eureka服务注册与服务发现 【Spring Cloud 四】Ribbon负载均衡 【Spring Cloud 五】OpenFeign服务调用 【Spring Cloud 六】Hystrix熔断 【Spring Cloud 七】Sleuth+Zipkin 链路追踪 在项目中是使用了Gateway做统一的请求的入口,以及统一的跨域处理以及

    2024年02月12日
    浏览(35)
  • Spring Cloud 之 Gateway 网关

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 Gateway官网 :https://spring.io/projects/

    2024年02月16日
    浏览(27)
  • Spring cloud教程Gateway服务网关

    写在前面的话: 本笔记在参考网上视频以及博客的基础上,只做个人学习笔记,如有侵权,请联系删除,谢谢! Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提

    2024年02月08日
    浏览(36)
  • Spring Cloud第二季--服务网关Gateway

    Spring Cloud Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。 Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了 Netty 通讯框架。Spring Cloud Gateway能干嘛呢? Gateway是原zuul1.x版的替代。 Spring Cloud Gateway 与 Zuul的区别: Zuu

    2024年02月03日
    浏览(36)
  • spring cloud gateway网关和链路监控

    文章目录 目录 文章目录 前言 一、网关 1.1 gateway介绍 1.2 如何使用gateway  1.3 网关优化 1.4自定义断言和过滤器 1.4.1 自定义断言 二、Sleuth--链路追踪 2.1 链路追踪介绍 2.2 Sleuth介绍 2.3 使用 2.4 Zipkin的集成  2.5 使用可视化zipkin来监控微服务 总结 所谓的API网关,就是指系统的 统

    2024年02月02日
    浏览(30)
  • Spring Cloud之API网关(Gateway)

    目录 API网关 好处 解决方案 Gateway 简介 特征 核心概念 Route(路由) Predicate(断言) Filter(过滤器) 工作流程 Route(路由) 路由配置方式 1.yml配置文件路由 2.bean进行配置 3.动态路由 动态路由 Predicate(断言) 特点 常见断言 示例 Filter(过滤器) filter分类 Pre 类型 Post 类型 网关过滤器 格式

    2024年02月08日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包