SpringCloud(一)Eureka、Nacos、Feign、Gateway

文章目录

  • 概述
    • 微服务技术对比
  • Eureka
    • 服务远程调用
    • 服务提供者和消费者
    • Eureka注册中心
      • 搭建注册中心
      • 服务注册
      • 服务发现
      • Ribbon负载均衡
        • 负载均衡策略
        • 饥饿加载
  • Nacos
    • Nacos与Eureka对比
    • Nacos服务注册
      • Nacos服务分集群存储
      • NacosRule负载均衡
      • 服务实例权重设置
      • 环境隔离
    • Nacos配置管理
      • 配置热更新
      • 多环境配置共享
      • Nacos集群搭建
  • Feign
    • 简单使用
    • 自定义配置
    • Feign性能优化
    • Feign最佳实践
  • Gateway
    • 搭建网关
      • 路由断言工厂
      • 过滤器工厂
      • 全局过滤器
      • 过滤器执行顺序
    • 网关跨域问题处理

概述

微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。

在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。简单来说,就是将一个系统按业务划分成多个子系统,每个子系统都是完整的,可独立运行的,子系统间的交互可通过HTTP协议进行通信(也可以采用消息队列来通信,如RoocketMQ,Kafaka等)。

在这里插入图片描述
在这里插入图片描述

微服务技术对比

在这里插入图片描述
在这里插入图片描述

Eureka

服务远程调用

在一个服务模块中调用另一个服务,需要在服务中构建类似前端发出的http请求访问另外一个服务。

在这里插入图片描述
服务端可以基于RestTemplate发起http请求实现远程调用,步骤如下:
在这里插入图片描述
在这里插入图片描述

服务提供者和消费者

  • 服务提供者:暴露接口给其他微服务调用
  • 服务消费者:调用其他微服务提供的接口
  • 服务者与消费者角色其实是相对的,一个服务可以同时是服务提供者和服务消费者。

Eureka注册中心

在这里插入图片描述
1、服务提供者向Eureka注册中心注册服务信息
2、服务消费者向Eureka注册中心拉取服务信息
3、如果有多个服务提供者,利用负载均衡算法,从服务提供者列表中选择一个。
4、服务提供者每隔30秒向EurekaServer发送心跳请求,报告健康状态,Eureka会更新记录服务列表信息,心跳不正常会被剔除。

搭建注册中心

EurekaServer本身就是一个单独的微服务组块。
在这里插入图片描述
配置文件yml中指定服务端口,服务名称,并将自身作为服务注册到Eureka服务器。
启动后:
在这里插入图片描述

服务注册

在这里插入图片描述
如果想让一个服务模拟多实例部署:
注意在environment的option选项中设置命令参数选项:-Dserver.port = 8082,其中-D指设置参数。
在这里插入图片描述

服务发现

在这里插入图片描述

在这里插入图片描述

Ribbon负载均衡

在这里插入图片描述
Ribbon对请求进行拦截,从Eureka-server拉取请求服务列表,Ribbon通过“轮询”等负载均衡手段,选择其中一个服务。

@LoadBalanced注解原理:

  1. 拦截请求: 请求被负载均衡拦截器拦截。
  2. 由请求id,拉取服务列表:动态服务列表负载均衡器从请求的url中获取服务id(服务名),向Eureka-server拉取服务列表。
  3. 基于负载均衡策略,选择服务的ip + 端口:动态服务列表负载均衡器基于IRule提供的负载均衡策略,选择服务列表中的某个服务的ip地址和端口号,并返回给负载均衡拦截器。
  4. 替换服务id为真实的服务ip + 端口:负载均衡拦截器将服务id(服务名)替换为真实的服务的ip + 端口号,向服务提供者发起真正的请求。

在这里插入图片描述

负载均衡策略

在这里插入图片描述
在这里插入图片描述
通过定义IRule实现可以修改负载均衡规则,有两种方式:

  • 代码方式,配置IRule的Bean,针对服务消费者,即不管调用哪个微服务,都会采用你配置的IRule规则。
  • 配置文件方式,在配置文件中先指定服务名称,再指定Ribbon负载均衡规则,针对服务提供者,即只对某个微服务(配置的服务名称)有效。
    在这里插入图片描述
饥饿加载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Nacos

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件,相比Eureka功能更加丰富,在国内受欢迎程度较高。

Nacos与Eureka对比

  1. Nacos中服务实例有临时实例和非临时实例之分,Eureka则没有。
    • Nacos中所有实例默认是临时实例,临时实例与Nacos之间由实例主动发送心跳包,Nacos做心跳监测,如果监测不到心跳,则将其从服务列表剔除。
    • 非临时实例则由Nacos主动询问实例是否存活。非临时实例如果询问时发现实例宕机,不会被Nacos剔除,只是会被标记为不健康,Nacos会等待其恢复上线。
    • 主动询问的频次较高,而心跳监听的周期较长,所有临时实例从掉线到被发现的时间更长,非临时实例如果掉线很快就会被发现。

2 . Eureka与服务消费者之间,服务消费者是定时向Eureka拉取(pull)服务列表。Nacos支持服务列表变更的消息推送模式,服务列表更新就更加及时。

Nacos服务注册

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Nacos服务分集群存储

  • 1、一级是服务,一个服务有多个不同的实例。
  • 2、二级是集群,例如地域中心
  • 3、三级是实例,位于某个地域中心机房上运行的服务实例。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NacosRule负载均衡

  1. 配置文件中为服务指定负载均衡规则为NacosRule。
  2. 请求优先选择同集群服务实例列表,本地集群找不到提供者,才去找其他集群寻找,并且会报警告。
  3. 确定可用列表后,再采用随机负载均衡挑选实例。

在这里插入图片描述

服务实例权重设置

实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求

Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在这里插入图片描述

实例的权重控制
Nacos控制台可以设置实例的权重值,0~1之间同集群内的多个实例,权重越高被访问的频率越高,权重设置为O则完全不会被访问。

环境隔离

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用于做最外层隔离。

在namespace中又有Group的概念。
不同namespace下的服务互相是不可见的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Nacos配置管理

Nacos除了用来做服务注册发现,还可以用于做服务的配置管理,并实现服务配置的热更新。

在这里插入图片描述
在Nacos添加配置信息:
在这里插入图片描述
在这里插入图片描述

没有Nacos配置时,配置获取的步骤如下:
在这里插入图片描述
有Nacos配置文件时:
先将Nacos服务器地址配置在优先级最高的bootstrap.yml文件中,然后读取Nacos中的配置文件,再读取本地application.yml中的配置文件,合并所有的配置。

在这里插入图片描述
实操步骤:
在这里插入图片描述
在这里插入图片描述

配置热更新

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多环境配置共享

生产环境与开发环境可能会有很多相同的配置属性,那么就可以写一个公共的配置文件来记录这些共有的相同的配置属性,常用“服务名 + yaml”的格式来命名,而各个环境特有的属性,使用“服务名 + “-” + 环境名 + yaml”的格式来命名。
在这里插入图片描述
本地环境中可能已经配置了yaml文件,而Nacos中也有可能配置共享配置和环境配置,这些配置的优先级顺序是怎么样的呢?

考虑运维的便利性,在Nacos中配置的属性优先级是更高了,针对于某个特殊环境配置的属性又要高于共享配置属性,因此有:

服务名-profile.yaml > 服务名称.yaml > 本地配置

在这里插入图片描述

Nacos集群搭建

在这里插入图片描述

设置Nacos服务器集群ip和端口:

在这里插入图片描述
搭建集群:

在这里插入图片描述
为什么需要数据库呢?
Nacos配置信息是持久化到数据库中的,Nacos本身也是一个服务器,需要有自己的数据库。

在这里插入图片描述

Feign

Feign需要解决的问题:
在这里插入图片描述
Feign是一种声明式的http客户端,其作用就是帮助我们优雅的实现http请求。

简单使用

在这里插入图片描述

具体使用:

1、使用@FeignClient注解一个接口UserClient,参数指明服务名称,该接口中都是对注解指定的服务的调用。
2、接口中定义的调用方法是类似SpringMVC中的注解声明调用。

在这里插入图片描述

自定义配置

Feign允许我们在对http请求发送的各个阶段做自定义配置,包含请求发送响应日志、响应结果解码器、请求参数编码器、请求失败重试机制等。

最常用的就是请求发送响应日志的配置,日志级别包含四种类型:

  • NONE:无日志
  • BASIC:基本日志,仅包含请求行、响应行信息。
  • HEADERS:头部日志,包含请求行、请求头,响应行,响应头。
  • FULL:包含全部的请求和响应信息。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Feign性能优化

在这里插入图片描述
主要优化两个点:

  • 1、Feign底层http连接实现是不带连接池的,可以选择带连接池的http请求框架替换。
  • 2、日志级别:日志会影响性能,最好使用basic或者默认的none。

怎么配置带有连接池的HttpClient?

在这里插入图片描述

Feign最佳实践

方式一是通过继承的方式:既然服务提供者和服务调用者都需要同样的API接口,那么可以只写一个,服务提供者和服务端调用者都继承这个接口。但是这样做可能导致紧耦合,而且SpringMVC中的路径参数映射也会失效。

在这里插入图片描述
方式二:将API接口以及接口所涉及的实体类、返回值对象类都抽取为一个公共模块,服务提供者和消费者都通过引用依赖的方式,加载这个模块。

在这里插入图片描述

Gateway

外部请求想要请求微服务资源,首先得经过统一的网关,网关实现的功能:

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 请求限流

在这里插入图片描述

搭建网关

网关服务器本身也是一个微服务!

搭建网关服务的步骤:
1、创建新的module,引入SpringcloudGateway和Nacos服务发现依赖
在这里插入图片描述
2、配置Nacos地址以及路由规则

在这里插入图片描述
在这里插入图片描述

路由断言工厂

在这里插入图片描述
在这里插入图片描述

使用规则见spring官网

过滤器工厂

过滤器在路由规则之后,可以通过设置多个过滤器,构成过滤器链。
在这里插入图片描述
在这里插入图片描述
使用规则见spring官网

使用案例,给请求加响应头字段:
在这里插入图片描述
在响应接口处取出过滤器加的字段并打印出来:
在这里插入图片描述
如果想对所有服务的请求都加过滤器,可以在default-filter加过滤器工厂。

在这里插入图片描述

全局过滤器

全局过滤器与default-filter配置类似,对所有请求生效,全局过滤器不同的地方在于,过滤器的处理的逻辑需要自己写代码实现,定义方式是实现GlobalFilter接口。

在这里插入图片描述

使用案例:
在这里插入图片描述

在这里插入图片描述
为了让过滤器生效,首先还需要给过滤器加上Component和Order注解。
在这里插入图片描述
@Order注解,指定过滤器的优先级顺序,过滤器顺序也可以通过实现Orderd接口来指定,接口实现方法直接返回order顺序。

过滤器执行顺序

在这里插入图片描述
在这里插入图片描述

网关跨域问题处理

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

ESP32设备驱动-OLED-SSD1306(I2C)显示屏驱动

OLED-SSD1306(I2C)显示屏驱动 1、OLED介绍 OLED显示屏是指有机电激发光二极管(OrganicLight-EmittingDiode,OLED)由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一…

C++面试题准备

文章目录 一、线程1.什么是进程,线程,彼此有什么区别?2.多进程、多线程的优缺点3.什么时候用进程,什么时候用线程4.多进程、多线程同步(通讯)的方法5.父进程、子进程的关系以及区别6.什么是进程上下文、中断上下文7.一…

短期风速预测|LSTM|ELM|批处理(matlab代码)

目录 1 主要内容 LSTM-长短时记忆 ELM-极限学习机 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序是预测类的基础性代码,程序对河北某地区的气象数据进行详细统计,程序最终得到pm2.5的预测结果,通过更改数据很容易得到风速预测结…

WSL2安装历程

WLS2安装 1、系统检查 安装WSL2必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。 查看 Windows 版本及内部版本号,选择 Win R,然后键入winver。 2、家庭版升级企业版 下载HEU_KMS_Activ…

Django模板加载与响应

前言 Django 的模板系统将 Python 代码与 HTML 代码解耦,动态地生成 HTML 页面。Django 项目可以配置一个或多个模板引擎,但是通常使用 Django 的模板系统时,应该首先考虑其内置的后端 DTL(Django Template Language,D…

【Flutter】Flutter Web 开发 如何从 URL 中获取参数值

【Flutter】Flutter Web 开发 如何从 URL 中获取参数值 文章目录 一、前言二、Flutter Web 中的 URL 处理三、如何从 URL 中获取参数四、实际业务中的用法五、完整示例六、总结 一、前言 大家好!我是小雨青年,今天我想和大家分享一下在 Flutter Web 开发…

UGUI交互组件Button

一.初识Button对象 从菜单中创建Button对象,Button的文本由子节点Text对象显示,Button对象的组件除了基础组件外,还有Image用来显示Button常规态的图片,还有Button组件用来控制点击过渡效果和点击事件的响应。 二.Button组件的属…

C#,数值计算——Ranq1的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Recommended generator for everyday use.The period is 1.8E19. Calling /// conventions same as Ran, above. /// </summary> public class Ranq1 { …

【2023年11月第四版教材】第17章《干系人管理》(第二部分)

第17章《干系人管理》&#xff08;第二部分&#xff09; 4 过程1-识别干系人4.1 数据收集★★★4.3数据分析4.4 权力利益方格4.5 数据表现&#xff1a;干系人映射分析和表现★★★ 5 过程2-规划干系人参与5.1 数据分析5.2 数据表现★★★5.2.1 干系人参与度评估矩阵★★★ 5.3 …

git_SSL certificate problem: unable to get local issuer certificate解决办法

拉取问题 再拉取代码的时候&#xff0c;报这个错误 这是由于当你通过HTTPS访问Git远程仓库的时候&#xff0c;如果服务器上的SSL证书未经过第三方机构认证&#xff0c;git就会报错。原因是因为未知的没有签署过的证书意味着可能存在很大的风险。解决办法就是通过下面的命令将…

【算法分析与设计】回溯法(上)

目录 一、学习要点1.1 回溯法1.2 问题的解空间1.3 0-1背包问题的解空间1.4 旅行售货员问题的解空间1.5 生成问题状态的基本方法 二、回溯法的基本思想三、回溯算法的适用条件四、递归回溯五、迭代回溯六、子集树与排列树七、装载问题八、批处理作业调度问题 一、学习要点 理解回…

操作系统初探 - 进程的概念

目录 预备知识 冯诺依曼和现代计算机结构 操作系统的理解 进程和PCB的概念 PCB中的信息 查看进程信息的指令 - ps pid 进程状态 预备知识 在学习操作系统之前我们需要先了解一下如下的预备知识。 冯诺依曼和现代计算机结构 美籍匈牙利科学家冯诺依曼最先提出“程序存…

POJ 3109 Inner Vertices 离散化+树状数组

一、题目大意 围棋棋盘&#xff0c;如果某个坐标上下左右的四个方向都存在棋子&#xff0c;那么ans1&#xff0c;根据输入的棋子数量&#xff0c;求出ans的数量。 二、解题思路 题目中有说到如果程序不会结束&#xff0c;那么输出-1&#xff0c;这其实是无源之水&#xff0c…

【爬虫】用wget命令爬虫的简易教程

文章目录 1. 获取登录的请求2. 用postman模拟登录请求3. 用wget模拟登录请求并保存cookie4. 开始爬取网站5. 查看爬取结果6. 网站爬虫简易教程 爬取需要登录的网站的资源 背景&#xff1a;对于一些网站需要使用用户名和密码登录并且使用了https&#xff0c;我们如果不通过凭证将…

win10系统任务栏图标变成白色的解决办法

我平时都是用滴答清单进行管理这个自己的日程代办的&#xff0c;但是今天打开的时候发现这个快捷方式突然变成纯白色的了&#xff0c;重启电脑之后&#xff0c;这个图标的样式仍然没有变化。上网查找解决办法之后&#xff0c;终于搞好了&#xff0c;于是就有了下面的教程。 为什…

大数据Flink(九十五):DML:Window TopN

文章目录 DML:Window TopN DML:Window TopN Window TopN 定义(支持 Streaming):Window TopN 是一种特殊的 TopN,它的返回结果是每一个窗口内的 N 个最小值或者最大值。 应用场景

数据结构—归并排序-C语言实现

引言&#xff1a;归并排序跟快速排序一样&#xff0c;都运用到了分治的算法&#xff0c;但是归并排序是一种稳定的算法&#xff0c;同时也具备高效&#xff0c;其时间复杂度为O(N*logN) 算法图解&#xff1a; 然后开始归并&#xff1a; 就是这个思想&#xff0c;拆成最小子问题…

数据结构与算法----递归

1、迷宫回溯问题 package com.yhb.code.datastructer.recursion&#xffe5;5;public class MiGong {public static void main(String[] args) {// 先创建一个二维数组&#xff0c;模拟迷宫// 地图int[][] map new int[8][7];// 使用1 表示墙// 上下全部置为1for (int i 0; i…

BASH shell脚本篇4——函数

这篇文章介绍下BASH shell中的函数。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 函数是代码重用的最重要方式。Bash函数可以定义为一组命令&#xff0c;在b…

华为数通方向HCIP-DataCom H12-831题库(单选题:161-180)

第161题 某台路由器Router LSA如图所示,下列说法中错误的是? A、本路由器已建立邻接关系 B、本路由器为DR C、本路由支持外部路由引入 D、本路由器的Router ID为10.0.12.1 答案: B 解析: 一类LSA的在transnet网络中link id值为DR的route id ,但Link id的地址不是10.0.12.…