spring cloud搭建(zuul)

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

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


spring cloud 相关组件搭建(建议顺序):

  • eureka(注册中心服务)spring cloud搭建(eureka)
  • P-C service(服务提供者和服务调用者)spring cloud搭建(P-C service)
  • feign(接口调用)spring cloud搭建(feign)
  • hystrix(熔断器)spring cloud搭建(hystrix)
  • zuul(网关服务)本篇

本篇基于前两篇


一、zuul网关简介

Zuul是一个路由网关(GateWay)
有两个作用:

  • 路由:将外部请求转发到指定的微服务实例上,实现外部访问统一入口
  • 过滤:对外部请求的处理过程进行控制,实现请求校验、服务聚合等功能

应用:
将zuul作为一个服务注册到eureka中,同时从eureka中获取其他服务信息,对微服务的访问都通过zuul进行跳转,即可实现所有服务请求统一入口管理,也可进行请求校验等操作。


二、开发环境:

JDK版本:1.8
maven版本:3.9.0
开发工具:IDEA社区版ideaIC-2018.3
项目框架:spring boot 版本为 2.2.4.RELEASE springboot搭建传送门spring cloud 版本为Hoxton.SR12
为什么选择这两个版本,因为使用zuul时,用其他版本都报错,目前只知道两个版本一起用没问题

以下均基于父项目和eureka子项目创建后的操作

父项目和eureka的配置请参考:spring cloud搭建(eureka)

三、包结构预览

最后创建好的服务及包结构如下
spring cloud搭建(zuul)
spring cloud搭建(zuul)

四、创建接口

在service1和service2中创建简单的请求接口
注:这两个服务只需要开启eureka注册服务即可,zuul会到注册中心获取两个服务的信息

1. service1的请求控制类Service1ZuulController

Service1ZuulController.java

package com.service1.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassDescription: service1服务zuul调用的测试请求
 * @Author:李白
 * @Date:2023/6/2 14:06
 */
@RestController
@RequestMapping("/service1-pre")
public class Service1ZuulController {
    @RequestMapping("/service1/zuul/test1/11")
    public String service2Test1(){
        return "service1-zuul-test1-11";
    }
    @RequestMapping("/service1/zuul/test2/22")
    public String service2Test2(){
        return "service1-zuul-test2-22";
    }
}

2. service1的请求控制类Service2ZuulController

package com.service2.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassDescription: service2服务zuul调用的测试请求
 * @Author:李白
 * @Date:2023/6/2 14:11
 */
@RestController
@RequestMapping("/service2-pre")
public class Service2ZuulController {
    @RequestMapping("/service2/zuul/test1/11")
    public String service2Test1(){
        return "service2-zuul-test1-11";
    }
    @RequestMapping("/service2/zuul/test2/22")
    public String service2Test2(){
        return "service2-zuul-test2-22";
    }
}

五、创建子项目zuul

1. 创建zuul服务

此处省略,可参考本片目录下方spring cloud搭建流程中的第一篇

2. 配置zuul的依赖

在zuul的pom.xml中配置zuul网关需要的依赖
注:在zuul服务的pom中配置zuul的相关依赖时,如果使用的其他版本出现依赖报错,将父项目pom的相关依赖版本控制做一下修改,亲测可用:
将spring boot的版本换为2.2.4.RELEASE将spring cloud的版本换为Hoxton.SR12
zuul服务的完整pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring_cloud_demo</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring_cloud_zuul</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--spring cloud eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--spring cloud zuul-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>
    </dependencies>

</project>

因为zuul依赖中包含spring-boot-starter-web所以可省略spring boot启动依赖的引入
spring cloud搭建(zuul)

3. zuul的yml文件配置

application.yml

server:
  port: 8004

spring:
  #服务相关信息
  application:
    #服务名称 会出现在注册中心
    name: Zuul-app

#注册中心
eureka:
  client:
    #默认开启 是否将本服务注册到注册中心
#    register-with-eureka: ture
    #默认开启 是否获取注册中心服务信息
#    fetch-registry: true
    #注册中心服务地址
    service-url:
      #默认地址
      defaultZone: http://localhost:8001/eureka/
  #服务实例相关
  instance:
    #点击具体的微服务,右下角是否显示ip
    prefer-ip-address: true
    #显示微服务的名称(在注册中心的别名)
    instance-id: zuul-8004


#服务网关(路由)
zuul:
  #请求前缀
#  prefix: /service2-pre
  #配置路由表
  routes:
    #配置所需路由的服务信息,配置多个服务信息时默认最后一个有效,其余不可用
    #对每个服务都可以指定一个唯一key,该值可以任意指定
    service1-app:
      #将以/user-service/开头的请求映射到service1-app这个服务上
      #被路由的服务请求路径
#      path: /service1-pre/**
      path: /**
      #路由接收的服务实例名称,依赖于eureka,通过实例名来在eureka中获取服务地址及端口,再进行路由拼接访问
      serviceId: Service1-app
      #如果不用实例名也可以用服务的具体url,使用url时是不依赖于eureka的,会根据url拼接路径访问跳转
#      url: http://localhost:8002/
    #对每个服务都可以指定一个唯一key,该值可以任意指定
    service2-app:
      #将以/user-service/开头的请求映射到service1-app这个服务上
      #被路由的服务请求路径
#      path: /service2-pre/**
      path: /**
      #路由接收的服务实例名称,依赖于eureka,通过实例名来在eureka中获取服务地址及端口,再进行路由拼接访问
      serviceId: Service2-app
      #如果不用实例名也可以用服务的具体url,使用url时是不依赖于eureka的,会根据url拼接路径访问跳转
#      url: http://localhost:8003/



#ribbon:
  #负载均衡时是否开启eureka
#  eureka:
#    enable: false
  # 添加ribbon的超时时间设置
#  ReadTimeout: 3000
#  ConnectTimeout: 3000

这里注释可能有点多,不过根据注释应该都能知道每个参数的意思

4. zuul的启动项

需要在启动类上添加@EnableEurekaClient和@EnableZuulProxy开启eureka客户端和zuul代理来使用相关功能
ZuulApplication.java

package com.zuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

/**
 * @ClassDescription: zuul启动类
 * @Author:李白
 * @Date:2023/5/31 9:55
 */
@EnableEurekaClient
@EnableZuulProxy
@SpringBootApplication
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

六、启动服务并查看注册中心

1. 启动eureka

先启动eureka服务,看如下红框即是启动成功
spring cloud搭建(zuul)

2. 启动service1

spring cloud搭建(zuul)

3. 启动service2

spring cloud搭建(zuul)

4. 启动zuul

再启动zuul服务,看到如下红框即是启动成功
spring cloud搭建(zuul)

5. 访问注册中心地址

http://localhost:8001

6. 查看服务注册信息

spring cloud搭建(zuul)
可看到三个服务均出现在注册中心

七、测试zuul功能是否可用

首先使用postman分别直接调用service1和service2的接口,结果正常后,再使用zuul网关调用两个服务的接口,如果正常返回则表示zuul网关功能可用。

1. service1接口测试

使用postman直接调用service1的接口进行测试(service1的端口号是8002)
service1的test1 url:

http://localhost:8002/service1-pre/service1/zuul/test1/11

service1的test1 结果正常
spring cloud搭建(zuul)

2. service2接口测试

使用postman直接调用service2的接口进行测试(service2的端口号是8003)
service2的test2 url

http://localhost:8003/service2-pre/service2/zuul/test2/22

service2的test2 结果正常
spring cloud搭建(zuul)

3. zuul请求service1接口postman请求调用,测试zuul功能

使用postman直接通过zuul调用service1的接口进行测试(service1的端口号是8002,通过zuul调用就是将访问地址中的端口号改为zuul的端口号8004)
zuul调用service1的test1 url

http://localhost:8004/service1-pre/service1/zuul/test1/11

zuul调用service1的test1 结果异常(404)
spring cloud搭建(zuul)

4. zuul请求service2接口postman请求调用,测试zuul功能

使用postman直接通过zuul调用service2的接口进行测试(service2的端口号是8003,通过zuul调用就是将访问地址中的端口号改为zuul的端口号8004)
zuul调用service2的test2 url

http://localhost:8004/service2-pre/service2/zuul/test2/22

zuul调用service2的test2 结果正常
spring cloud搭建(zuul)

5. 使用结论

  • 使用zuul网关时,依赖版本冲突严重,需要配指定的某些版本,局限性比不用zuul时的spring cloud更大。
  • 配置的yml文件zuul相关参数,routes下的服务名可随意指定且可定义多个,但经过测试定义两个时会默认生效后者,前者无法生效(即文章中配置的zuul.routes.service1-app不可用,但service2-app正常)。如此一来便只能转发一个服务了,这是有问题的,但目前还未发现问题出在哪里。
  • service1-app下的path参数用拼接方式配置如/service1-pre/**这种前缀时,不可用,只能用杠星星来使用,然后在routes同级上加prefix参数,来指定路由前缀,这也是一个问题,但目前还未发现问题出在哪里。
  • 跟path同级的serviceId参数是每个服务的spring.application.name参数值,也就是服务的别名,会展示在注册中心,通过这个服务别名实现指定服务的转发,当然也可以用服务的url,更直接,且不会受到eureka的局限,也就是说,使用serviceId来配置,必须有eureka才行,但配置rul,则有没有eureka都可以,因为url指定的是具体的服务地址,而非注册中心的服务别名。

其中的一些问题还请知道如何解决的大佬留言指教一二,感谢。

以上就是zuul的使用了。文章来源地址https://www.toymoban.com/news/detail-473325.html

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

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

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

相关文章

  • 微服务网关:Spring Cloud Zuul 升级 Spring Cloud Gateway 的核心要点

    在routes路由规则中,根据path去匹配,如果匹配中,就使用对应的路由规则进行请求转发 如果无法从routes中匹配,则根据path用“/”去截取第一段作为服务名进行请求转发,转发时,默认将第一段截取调 如果截取的服务名不在注册中心中存在服务,则报错404 在routes路由规则中

    2024年02月07日
    浏览(41)
  • Spring Cloud实战案例 │ Apollo和Zuul的整合开发

    Apollo是携程研发的开源配置管理中心,能够集中管理应用于不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 本案例结合一个案例介绍Apollo和Zuul的整合开发。整个应用分为4个微服务项目,分别是Eureka服务器项目mweath

    2024年02月14日
    浏览(26)
  • 在Spring Cloud中使用组件Zuul网关,并注册到Eureka中去

    在上一篇中,我们搭建了Spring Cloud的父子模块,并实现了一个Eureka子模块的启动,可以通过浏览器地址去访问Eureka主页了,相信了解过的童鞋应该看到,主页上并未有任何服务去注册,那么我们就在这篇,使用zuul网关作为第一个注册到Eureka注册中心的服务吧。 上一篇博文地

    2024年02月05日
    浏览(34)
  • 【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程

    JDK 1.8+ Maven 3.6+ Spring Boot 2.2.4.RELEASE Spring Cloud Hoxton.SR1 Spring Cloud Alibaba 2.2.0.RELEASE 官网推荐对应版本 本文主要介绍了如何搭建一个 Spring Cloud Alibaba 项目,适合已经熟练使用 Spring Boot ,想要学习搭建 Spring Cloud Alibaba 项目的小伙伴。 Spring Cloud Alibaba 为分布式应用程序开发提供了

    2023年04月18日
    浏览(36)
  • spring cloud搭建教程

             Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微服务:就是把一个单体项目,拆分为多个微服务,每个微服务可以独立技术选型,独立开发,独立部署,独立运维.并且多个服务相互协调,相互配合,最终完成用户的价值. Spring C

    2024年02月04日
    浏览(25)
  • Spring Cloud应用- Eureka原理、搭建

    初期对Spring Cloud的学习以应用搭建为主,所以内容不会太枯燥。 一直以来,自以为Spring全家桶的学习中,Spring framework是基础中的基础,部分内容也还是必须要读源码去理解底层原理,SpringMVC、SpringBoot,甚至Mybatis等等,都是如此。但是对于Spring Cloud来说,就从应用入手,以系

    2024年02月06日
    浏览(35)
  • Spring Cloud + Spring Boot 项目搭建结构层次示例讲解

    以下是我搭建Spring cloud项目架构的经验,我将以图片的形式和大家进行分享;至于Spring Boot的搭建经验,我会在图后以文字描述的方式和大家分享,请往下看: Spring Boot的搭建经验,我会以文字描述的方式和大家分享,请往下看: Controller 层 :Controller 层负责处理客户端的请

    2024年02月11日
    浏览(32)
  • idea快速搭建一个spring-cloud

    1、创建一个空的maven项目! 2、创建一个注册中心模块 3、配置注册中心 配置文件改用yml,配置如下: 注意pom文件中springcloud与springboot的版本对应问题 启动成功后,访问本地+端口即可看到注册中心页面,说明成功啦!

    2024年02月01日
    浏览(39)
  • IDEA2022搭建Spring Cloud多模块项目

    注意:创建父模块选用Spring Initializr的方式创建,让父模块继承springboot的maven配置,之后的所有子模块都通过maven的方式创建,子模块继承父模块就会间接继承springboot相关的配置,web,api模块再另外添加spring-boot-starter-web,spring-boot-starter-tomcat相关的依赖。网上有很多教程父模块

    2023年04月08日
    浏览(30)
  • springboot整合spring cloud gateway搭建网关服务

    spring cloud netflix zuul、spring cloud gateway是最常见的微服务网关,通过网关,我们可以在请求到达后端指定服务之前/后端服务处理完业务响应数据之后对响应进行对请求/响应进行处理。 比如常见的参数校验、接口鉴权等等,在后端服务的拦截器和过滤器能做的事在网关都可以做

    2024年02月07日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包