SpringCloud微服务之Zuul网关

news2024/11/16 5:54:59

SpringCloud微服务之Zuul网关

家庭生活中经常有这样的感悟,家中的财政大权在老婆手里,想要花个小钱买个冰棍,得跟老婆请示,想要出个远门看看北京猿人,得跟老婆请示,想不要脸面去个夜店看看别的妞好在哪里,得跟老婆请示......老婆就是这些任意活动去向的必经关卡,如下图所示。

 

依图中所示,如果把每条路当成是高速公路,老婆相当于进入一个公共的收费口或者检查站。这个收费口或者检查站就是网关。

一、什么是网关。

不同的微服务一般会有不同的网络地址,而外部客户端(例如手机APP)可能需要调用多个服务的接口才能完成一个业务需求,而微服务的应用可能部署在不同机房,不同地区,不同域名下。此时客户端想要请求对应的服务,都需要知道机器的具体的IP或者域名URL,此时就有了网关,客户端相关的请求直接发送到网关,由网关根据请求标识解析判断出具体的微服务ip,再把请求转发到微服务实例。

就比如公园的大门处,不管是购票也好,入园也好,出园也好,坐缆车也好,都离不开公园的大门处,这就是网关。如下图所示。

 

从图中所看到到公园大门处的网关,其作用在于:单点入口,路由转发,限流熔断,日志监控,安全认证。

假如有红绿2个颜色的服务集群,绿色是v1版本,红色是v2版本。可以通过网关控制客户端请求具体请求到红色还是绿色的服务实例。网关就有这样的作用。如下图所示。

 

三、zuul网关服务器注册中心的实现

1、点击File--->New---->Project.....,如下图。

 

2、在弹出的地话框中,左边点击Spring Initializr,表示Spring的初始程序,右边在默认的地方可能会初始化失败,需要选择自定义的地址:http://start.aliyun.com。如右图所示。

 

3、在接下来的弹出框中输入spring cloud项目名称的Group和artifactId。如下图所示。

 

4、点击Next进入下一步,左边先点击Web,右边点击Spring web可以建立Web应用程序。如下图。

 

5、继续在这个对话框中,左边点击Spring Cloud Discovery,右边点击Eureka Server,如下图所示。

 

6、然后点击Next进入到“下一步”,会出现对话框。如下图所示。

 

7、在出现的对话框中,点击Finish后完成项目的构建向导。

项目框架建立后,修改主程序中的主类,如下图所示。

 

8、在打开的主程序中,加入注解@EnableEurekaServer。如下图所示。

 

最终,eurekaserver的程序代码如下。

package com.myfirsteurekabalance.myfirsteurekabalance;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class MyfirsteurekabalanceApplication {

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

}

9、下面需要编辑resources下面的application.yml文件,在原来的resouces目录下只有application.properties,需要把application.properties改成application.yml。然后编辑该文件。

 

10、application.yml的文件内容如下。

# 应用名称
spring:
  application:
    name: myfirsteurekabalance
# 应用服务 WEB 访问端口
server:
  port: 8011
eureka:
  client:
    register-with-eureka: true
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8011/eureka
  instance:
    hostname: myprovider1

其文件内容的解释如下 。

 

四、zuul网关客户端的搭建

1、同样点击File--->New----->Project....,如下图所示。

 

2、在打开的对话框中,左边继续点击Spring Initializr,表示Spring的初始程序,右边在默认的地方可能会初始化失败,需要选择自定义的地址:http://start.aliyun.com。如下图所示。

 

3、点击Next,然后在出现的对话框中输入项目名称。如下图所示。

 

4、在接下来出现的对话框中,左边选择Web,右边选择Spring Web。如下图所示。

 

 

5、继续在这个对话框中,左边选择Spring Cloud Discovery,右边选择Eureka Discovery Client。如下图所示。

 

6、然后点击下一步即Next,在出现的对话框中直接点击Finish完成项目建立的向导。如下图所示。

 

7、这里的客户端需要调用EnableZuulProxy启动网关代理。具体的客户端的代码如下。

package com.myzuulserver01.myzuulserver01;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class Myzuulserver01Application {
    public static void main(String[] args) {
        SpringApplication.run(Myzuulserver01Application.class, args);
    }
}

根据客户端服务的需要,继续将application.properties修改成application.yml。其内容如下。

# 应用名称
spring:
  application:
    name: myzuulserver01
# 应用服务 WEB 访问端口
server:
  port: 8019
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8033/eureka
zuul:
  routes:
    hello:
      url: http://localhost:9010/hello
      path: /hello/*
    hi:
      url: http://localhost:9010/hi
      path: /hi/*

这里设置了zuul的网关路由,路由中有两个地址:hello和hi。具体解释如下图。

 

注意配置文件中指明了路由的地址,其地址中有端口号,这个端口号就是网关服务客户端yml文件中决定的端口号。

五、再次建立路由指定的客户端

1、同样点击File--->New----->Project....,如下图所示。

 

2、在打开的对话框中,左边继续点击Spring Initializr,表示Spring的初始程序,右边在默认的地方可能会初始化失败,需要选择自定义的地址:http://start.aliyun.com。如下图所示。

3、点击Next,然后在出现的对话框中输入项目名称。如下图所示。

 

4、在接下来出现的对话框中,左边选择Web,右边选择Spring Web。如下图所示。

 

5、继续在这个对话框中,左边选择Spring Cloud Discovery,右边选择Eureka Discovery Client。如下图所示。

 

6、然后点击下一步即Next,在出现的对话框中直接点击Finish完成项目建立的向导。如下图所示。

 

7、客户端实现具体的controller方法,其项目结构图如下所示。

 

这里的ZuulClientController的控制器代码内容如下。

package com.myzuulclientdemo3.myzuulcleintdemo3.controller;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@RestController
public class ZuulClientController {
    @GetMapping("/hello/{name}")
    public String hello(@PathVariable("name")String name){
        return "hello "+name+"!";
    }
    @GetMapping("/hi/{name}")
    public String sayHi(@PathVariable("name")String name){
        return "Hi,"+name+"!";
    }
}

代码中的格式就是zuul网关的对应地址。

Zuul客户端的yml文件具体设置内容如下。

# 应用名称
spring:
  application:
    name: myzuulcleintdemo3
# 应用服务 WEB 访问端口
server:
  port: 9910
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8011/eureka

这样,如果访问http://localhost:9910/hi地址,就会通过网关分配到9910端口的服务器。如果访问http://localhost:9910/hello地址,就会通过网关分配到9910端口的服务器,也可以分配另外一外地址,这样就需要再次建立一个客户端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录第九天

专题:字符串 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。 比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab&…

ADI Blackfin DSP处理器-BF533的开发详解56:CVBS输入-DSP和ADV7180的MDMA用法(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS IN视频输出 代码实现功能 电视视频是奇场合偶场交替传输的,所以通过 CVBSIN 模块采集到的图像如上实验所看到的,是…

CentOS 7.6 安装与配置 MySql 5.7.40

1 通过wget下载MySql的rpm # wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2 检查是否存在MySql的repo # cd /etc/yum.repos.d/ # ls CentOS-Base.repo CentOS-Epel.repo可以看到没有MySql的repo 3 安装MySql的repo,并查看是否安…

React 生命周期

React 生命周期 这篇文章,我们来聊一聊在React中的生命周期。首先我们明确一点,在React中,函数式组件是没有生命周期的。谈到生命周期,都是关于类组件的! 生命周期官方网址 React.Component – React (docschina.or…

macOS Monterey 12.6.2 (21G320) Boot ISO 原版可引导镜像

macOS Monterey 12.6,皆为安全更新,不再赘述。 macOS Monterey 12.6,发布于 2022 年 9 月 12 日(北京时间今日凌晨),本次为安全更新。 今日(2022-07-21)凌晨,Apple 终于…

CentOS 8:SSH远程登录

SSH远程登录 SSH远程登录,也是 C / S 模式 服务端:sshd ,默认是启动的 systemctl status sshd systemctl start sshd SecureCRT 是打开了一个远程终端 注意:在终端环境里,不可以启动GUI程序 例如,在 …

【单片机】DS1302时钟/蜂鸣器

目录 一、DS1302时钟 1、DS1302时钟的介绍 2、DS1302时钟寄存器 3、DS1302时序图 4、BCD码 5、写一个时钟 6、写一个可调时钟 二、蜂鸣器 1、蜂鸣器的介绍​编辑 2、三极管放大驱动蜂鸣器 2.1NPN三极管工作原理(基极电流和发射电流均流向集电区&#xff…

Python图像识别实战(二):实现批量图像读取和像素转换(附源码和实现效果)

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章)。 从本期开始,我将做一个关于图像识别的…

Dubbo 3 Dubbo 快速入门 3.2 Dubbo 快速入门 3.2.3 服务消费者

Dubbo 【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】 3 Dubbo 快速入门 文章目录Dubbo3 Dubbo 快速入门3.2 Dubbo 快速入门3.2.3 服务消费者3.2 Dubbo 快速入门 3.2.3 服务消费者 OK,之前我们 已经完成了 服务提供 者的改造 现在来改造 服务…

智能电网中采用博弈论的方法(Python代码实现)

目录 1 概述 2 系统模型 2.1 单价模型 2.2 效用模型和 能源消费者(EC) 的目标 2.3 成本模型和 中央电站(CPS) 的目标 2.4 优化问题 3 优化的能源管理模型 4 模型的特性 4.1 均衡的存在 4.2 决策过程 5 算法 6 数值的…

vector详解(不定长数组)

目录 什么是vector vector的介绍 模板的声明方式 vector的基本操作 push_back insert erase 遍历vector 小明爱数列-练习题 思路 什么是vector vector的介绍 和我一样,我猜你们看到题目时心里都会产生一个疑问"什么是vector?(大佬除外)".vector其实是…

一起Talk Android吧(第四百四十四回:UI控件之DatePicker)

文章目录概念介绍使用方法内容总结各位看官们大家好,上一回中咱们说的例子是"UI控件之NumberPicker",这一回中说的例子是"UI控件之DatePicker"。闲话休提,言归正转,让我们一起Talk Android吧! 概念介绍 看官…

CSS实现文字扫光特效

上大学的玩 ae 的时候,就曾遇到过这个特效。偶然在百度看到了类似特效,没想到竟然能用 css 实现,所以就研究了一下,文字扫光效果如下: 实现思路: 光效移动效果,可以通过 background-image 设置…

RCNN网络源码解读(Ⅲ) --- finetune训练过程

目录 0.回顾 1.finetune二分类代码解释(finetune.py) 1.1 load_data(定义获取数据的方法) 1.2 CustomFineTuneDataset类 1.3 custom_batch_sampler类( custom_batch_sampler.py) 1.4 训练train_mod…

JVM.......未完待续

一、了解 JVM JVM ( Java Virtual Machine ),又称之为 Java虚拟机。JVM 的运行与操作系统无关,能够实现跨平台,只要是安装了JVM的机器,都能运行Java程序,Java语言最重要的特点 "跨平台运行",也…

关于应用形态数轴方法的一点展望

“既然目前物理化学关于物质世界的最高理论成果,即所谓由量子力学和统计力学组成的第一原理,只能求算物质无生命的性质,而药物设计关心的却是有生命的性质.那么是否第一原理对药物设计就无所作为呢?不是的.也就是说,尽…

设备资产管理系统有什么用?

在PC时代,电脑、打印设备的那个已经成为当代企业的必备资产,生产型企业还有生产设备等资产,企业规模越大资产就越多,就越难管理,因此设备资产管理系统成为诸多企业数字化管理的重要组成之一。设备管理系统的应用不仅能…

算法基础篇-10-动态规划

1. 简介 动态规划是一种算法思想; 动态规划递归式子问题 1.1 案例1: 斐波那契数列 斐波那契数列:FnFn-1Fn-2 代码演示: 使用递归和非递归的方法来求解斐波那契数列的第n项; 递归的方法: public static…

uniapp实战仿写网易云音乐(二)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)

文章目录前言顶部导航条的实现视频列表的展示部分CSS部分最后前言 接着上篇文章继续完成剩下的部分,本篇文章是完成第二个页面——视频页面的部分,视频还是没有做播放的效果,主要是做展示效果。下面附上两篇文章链接,没看过的同学…

【概率论】正态分布

前导知识: 概率密度函数(密度函数):描述一个随机变量的在某个确定的取值点附近的可能性的函数。 随机变量的取值落在某个区域内的概率为概率密度函数在这个区域上的积分。 性质: f(x)>0 数学期望 又称均值&am…