我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于服务网关SpringCloudZuul(Finchley版本)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于服务网关SpringCloudZuul(Finchley版本)

一、Zuul简介

Zuul作为微服务系统的网关组件,用于构建边界服务(Edge Service),致力于动态路由、过滤、监控、弹性伸缩和安全。其在微服务架构中有着重要的作用,主要体现在以下六个方面:

Zull、Ribbon以及Eureka相结合可以实现智能路由和负载均衡的功能,Zull可以按照某种策略将请求分发到不同的实例上;

网关作为边界服务,将内部服务的API接口进行聚合并统一对外暴露接口。保护内部服务的API接口,防止内部服务被外界调用泄露敏感信息;

网关可以对用户的身份权限进行认证,防止非法请求API接口;

网关可以实现监控功能,实时日志输出,对请求进行记录;

网关可以用来实现流量监控,在高流量的情况下,对服务进行降级;

API接口从内部服务分离出来,便于测试

二、请求路由

使用Spring Cloud Zuul实现路由的规则是十分简单的。路由方式包括两种:传统路由方式,面向服务的路由方式。

2.1 传统路由

下面我们看以下配置:

zuul.routes.holiday.path=/holiday
  @Override
  public String getRoute() {
    return "*";
  }
  public ClientHttpResponse fallbackResponse(String route) {
    return new ClientHttpResponse() {
      @Override
      public HttpStatus getStatusCode() throws IOException {
        return HttpStatus.OK;
      }
      @Override
      public int getRawStatusCode() throws IOException {
        return 200;
      }
      @Override
      public String getStatusText() throws IOException {
        return "OK";
      }
      @Override
      public void close() {
      }
      @Override
      public InputStream getBody() throws IOException {
        return new ByteArrayInputStream((route+" is unavailable.").getBytes());
      }
      @Override
      public HttpHeaders getHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        return headers;
      }
    };
  }
  @Override
  public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
    if (cause != null) {
      String reason = cause.getMessage();
      logger.info("Excption {}",reason);
    }
    return fallbackResponse(route);
  }
}

六、实战

6.1 pom文件

<?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>
        <groupId>com.southgis.ibase.parent</groupId>
        <artifactId>parentWebService</artifactId>
        <version>2.0.1-SNAPSHOT</version>
        <relativePath>../../parent/parentWebService/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>api-gateway</artifactId>
    <groupId>com.southgis.ibase.systemassistance</groupId>
    <version>2.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <description>网关服务</description>
    <dependencies>
      <!--服务注册与发现-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!--配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!--路由网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
        <!--cas 客户端-->
        <dependency>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>apiGateway</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.southgis.ibase.systemassistance.ApiGatewayCustomApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

6.2 配置文件

bootstrap.properties

#服务名 对应配置文件中的{application}部分
spring.application.name=apiGateway
#对应前配置文件中的{profile}部分
spring.cloud.config.profile=dev2
#配置访问路径
server.servlet.context-path=/eureka-server
#注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka-server/eureka
#为监控端点 /info和/health端点也加上类似的前缀
management.server.servlet.context-path=/apiGateway
eureka.instance.statusPageUrlPath=${management.server.servlet.context-path}/actuator/info
eureka.instance.healthCheckUrlPath=${management.server.servlet.context-path}/actuator/health
#通过服务连接配置中心
#spring.cloud.config.discovery.enabled=true
#spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.uri = http://localhost:8080/config-server
#配置文件获取失败快速返回
spring.cloud.config.failFast=true
#日志配置
#logging.config=classpath:logback-spring.xml
#logging.path=D:/ibase/logs/holiday
#logging.pattern.console=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n
#logging.pattern.file=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n

apiGateway-dev2.properties

#访问端口
server.port=8080
#设置session超时时间为540分钟
server.servlet.session.timeout=PT540M
#zuul默认为所有服务开启默认的路由,为了服务安全,此处关闭
zuul.ignored-services=*
#代码字典服务路由
zuul.routes.codedict.path=/codedict
  @Override
  public String getRoute() {
    return "*";
  }
  public ClientHttpResponse fallbackResponse(String route) {
    return new ClientHttpResponse() {
      @Override
      public HttpStatus getStatusCode() throws IOException {
        return HttpStatus.OK;
      }
      @Override
      public int getRawStatusCode() throws IOException {
        return 200;
      }
      @Override
      public String getStatusText() throws IOException {
        return "OK";
      }
      @Override
      public void close() {
      }
      @Override
      public InputStream getBody() throws IOException {
        return new ByteArrayInputStream((route+" is unavailable.").getBytes());
      }
      @Override
      public HttpHeaders getHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        return headers;
      }
    };
  }
  @Override
  public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
    if (cause != null) {
      String reason = cause.getMessage();
      logger.info("Excption {}",reason);
    }
    return fallbackResponse(route);
  }
}

6.5 启动类

**
 * 路由网关服务部署启动类
 *
 * @author simon
 **/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableZuulProxy
@EnableEurekaClient
@SpringCloudApplication
public class ApiGatewayMicroApplication {
  public static void main(String[] args) {
    SpringApplication.run(ApiGatewayMicroApplication.class, args);
  }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于服务网关SpringCloudZuul(Finchley版本)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloud分布式微服务云架构 第五篇: 路由网关(zuul)(Finchley版本)

SpringCloud分布式微服务云架构 第五篇: 路由网关(zuul)(Finchley版本)在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,了解springcloud架构
2023-06-05

win10版本1903定位服务如何关闭

这篇“win10版本1903定位服务如何关闭”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10版本1903定位服务如何
2023-07-01

win10版本1909定位服务如何关闭

这篇“win10版本1909定位服务如何关闭”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10版本1909定位服务如何
2023-07-01

RESTful 服务版本控制:保持API稳定性的关键

API版本控制是保持API稳定性、向后和向前的可扩展性以及无缝集成新功能的关键。本文将讨论RESTful服务版本控制的重要性,并提供一些实施最佳实践。
RESTful 服务版本控制:保持API稳定性的关键
2024-02-05

关于云服务器的内网穿透升级配置问题

云服务器是一种虚拟服务器,通常用于在云计算平台上提供高性能计算服务。为了实现内网穿透升级配置,您需要了解以下几个关键步骤。确认目标计算机的内部网络结构和访问权限:您需要确认目标计算机的内部网络结构,以及是否拥有访问控制列表和认证机制。您还需要确认目标计算机是否支持云服务器的基本安全措施,例如VPN和SSL证书。配置内网穿透升级:您需要在云服务器的管理控制台上配置内网穿透升级选项。该选项应该
2023-10-26

关于云服务器的内网穿透升级配置问题及建议

云服务器的内网穿透升级是一个非常重要的升级配置,它可以帮助我们更好地管理物理服务器和虚拟服务器之间的内网流量。以下是关于云服务器的内网穿透升级配置问题及建议的一些注意事项:升级配置时需要考虑云服务器的物理安全性,以确保不会受到黑客攻击的威胁。建议升级配置时采取双重认证、密码校验等安全措施,并对云服务器的硬件和软件系统进行全面的安全加固。建议在升级配置之前对云服务器所在的物理机进行严格的测试,以确保云服务...
2023-10-27

云服务器访问本地网络怎么设置的呢怎么关闭

然而,如果您想要关闭云服务器,则需要知道您的云服务器的IP地址。在某些情况下,您可以使用DMZ(内部网络)将云服务器连接到本地网络。使用DMZ将云服务器连接到本地网络的步骤如下:配置云服务器的IP地址:打开命令提示符,输入“ipconfig”命令,在命令提示符中输入“ipaddress”。在IP地址输入框中,输入云服务
2023-10-27

关于云服务器的内网穿透升级配置问题及建议解决

内网穿透技术的核心思想是将内部网络划分成多个虚拟子网,通过代理IP的方式来访问外部网络的服务器。这样可以有效地避免内部机密信息被泄露的风险,同时也可以实现对内部网络的监控和管理。内网穿透技术在应用时需要考虑多方面的因素,比如内部网络的安全性、内部网络的访问权限、内部网络的可控性等等。对于内网穿透技术的升级和配置,需要根
关于云服务器的内网穿透升级配置问题及建议解决
2023-10-28

微服务(SpringBoot、SpringCloud、SpringCloud Alibaba、Nacos、JDK)之间的版本对应依赖关系(附Nacos高速下载地址)

前言 本文主要整理与介绍在搭建微服务项目时,核心组件之间的版本对应关系,避免版本依赖冲突带来的一系列问题,同时也方便后续升级与查看。 这里先放上我目前搭建的较新的微服务脚手架版本,如下(springboot3.0开始不支持jdk8) Spr
2023-08-19

SQLServer 错误 21892 无法在与虚拟网络名称“%s”相关联的可用性组主副本上查询 sys.availability_replicas 以获取成员副本的服务器名称:错误 = %d,错误消息

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 21892 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 SQLErrorNum21892 消息正文 ...
SQLServer 错误 21892 无法在与虚拟网络名称“%s”相关联的可用性组主副本上查询 sys.availability_replicas 以获取成员副本的服务器名称:错误 = %d,错误消息
2023-11-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录