首页 > 其他分享 >Spring Cloud Netflix第一代网关之Zuul基本使用

Spring Cloud Netflix第一代网关之Zuul基本使用

时间:2022-12-30 14:22:06浏览次数:41  
标签:网关 Zuul Netflix spring eureka client cloud

网关在微服务系统中起到一个门户的作用,主要作用如下:

  • 服务路由
  • 鉴权
  • 服务熔断
  • 流控
  • 灰度发布等

常用的网关有Zuul、Gateway、OpenResty + Lua、Kong、ApiSIX等等。本文以Zuul为例,虽然其性能可能表现的不是很好(Zuul 1.X),但是对于掌握网关的一些基础知识还是很有帮助的。

Spring Boot版本:2.0.9.RELEASE
Spring Cloud Netflix版本:Finchley.SR4(目前处于不维护状态)

1.父pom依赖如下

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>8</java.version>
        <spring.cloud.version>Finchley.SR4</spring.cloud.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.9.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2. 注册中心

这里以Eureka为例,注册中心服务依赖如下:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

application.yml配置信息如下:

server:
  port: 8000

spring:
  application:
    name: eureka-server

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false

代码启动类如下:

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

3.服务提供方

依赖如下:

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

application.yml配置文件内容如下:

server:
  port: 9000

spring:
  application:
    name: client

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka
  instance:
    prefer-ip-address: true

启动类如下:

@SpringBootApplication
@EnableDiscoveryClient
public class ClientApp {

    public static void main(String[] args) {
        SpringApplication.run(ClientApp.class, args);
    }
}

提供一个相加的处理类

@RestController
@RequestMapping("calc")
public class CalcController {

    @Value("${server.port}")
    private int serverPort;

    @GetMapping("add")
    public Integer add(@RequestParam("a") Integer a, @RequestParam("b") Integer b) {
        System.err.println("From Port: " + serverPort);
        return a + b;
    }
}

4. Zuul网关

依赖如下:

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
    </dependencies>

application.yml配置文件内容如下:

server:
  port: 8100

spring:
  application:
    name: Zuul Server

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka
  instance:
    prefer-ip-address: true

zuul:
  routes:
    client-service:
      path: /client/**
      serviceId: client

项目启动类如下:

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

分别启动Eureka注册中心、Zuul网关、Client服务,
直接通过Client服务的IP端口,http://localhost:9000/calc/add?a=1&b=5能正常访问;
通过访问网关:http://localhost:8100/client/calc/add?a=1&b=5,也能正常访问,说明网关路由到了Client服务上。

通过设置Client服务端口的形式,新增一个服务提供方:

启动成功后,Client服务将会有两个服务实例,如下:

访问上述网关的地址,可以看到Client服务端控制台会交替输出对应的端口信息,说明Zuul网关在路由服务时也使用了负载均衡。

整体服务架构如下:

标签:网关,Zuul,Netflix,spring,eureka,client,cloud
From: https://www.cnblogs.com/vielat/p/17014535.html

相关文章

  • IPSEC VPN网关构建高安全性的数据采集系统
    一、需求背景 在物联网飞速发展的当下,许多项目需求实现上位机软件远程实时监视现场设备运行的各项指标和参数,数据在传输过程中可能遭受篡改、数据泄露等风险,给企业造成一定......
  • 基于边缘计算网关的空压机监测应用
    空压机是工业生产中常见的设备,要保障生产作业处于高效率状态,就需要实现对各种工业机械设备运行状态的实时监测、故障预警和及时保养维护。传统的人工巡检、抽检模式越来越......
  • 智能灌溉远程采集控制网关BL280
    智能灌溉,顾名思义就是自动感知灌溉需求信息,自动执行灌溉操作任务,无需人工监控,的一种自动化灌溉模式。智能灌溉综合应用了计算机技术、传感技术、无线通信技术等现代化技术......
  • 计讯物联AI视频网关TG463为城市智慧交通赋能
    交通是经济的脉络和文明的纽带,也是城市发展的大动脉。随着5G、人工智能、大数据、云计算等创新科技走向成熟,在国家政策和创新技术的推动下,智慧交通建设迎来关键发展期。计......
  • 网络 | ifconfig 配置 IP 掩码 网关
    本地网卡设备eth1配置IP配置配置命令:ifconfigeth1192.168.x.x广播地址、掩码配置配置命令:ifconfigeth1192.168.x.xbroadcast192.168.1.255netmask255......
  • 当云原生网关遇上图数据库,NebulaGraph 的 APISIX 最佳实践
    本文介绍了利用开源API网关APISIX加速NebulaGraph多个场景的落地最佳实践:负载均衡、暴露接口结构与TLSTermination。API网关介绍什么是API网关API网关是......
  • 华普物联HP-AIOCAT-244 农林灌溉无线监管方案 CAT1/4G远程网络IO控制器 多路DI DO采集
    中国作为农林业大国,同时也意味着是用水大国,而且中国水资源极为短缺,水资源危机已成为制约经济可持续发展的重要的因素。我国农林业用水浪费严重,灌溉水利用系数低,因此走科技......
  • 计讯物联5G物联网智能网关助力充电桩运维管理更加高效
    随着中国“碳达峰、碳中和”发展目标的提出,新能源汽车渗透率的不断提升,充电桩基础设施建设也随之全面提速。计讯物联聚焦国家政策热点,洞悉行业最新风向,将充电桩、智能电网......
  • Netflix Mac(奈飞客户端)
    ​​ClickerforNetflixMac版是一款独立的播放器,无论您身在何处,都可以即时访问最近观看的节目在Mac上,具有直接从从Dock启动Netflix,从触摸栏控制Netflix,支持画中画等多种......
  • 微服务网关解决方案调研和使用总结 专题
    一.什么是网关1.1什么是网关APIGateway(APIGW/API网关),顾名思义,是出现在系统边界上的一个面向API的、串行集中式的强管控服务,这里的边界是企业IT系统的边界,可以理解为​......