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.rhkb.cn/news/146841.html

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

相关文章

算法精品讲解(2)——DP问题入门(适合零基础者,一看就会)

目录 前言 DP问题它是什么(了解) 从中学的例题谈起 再来说一下,DP问题的核心思想(理解) DP问题的解决方法 先说方法论: 再说具体的例子 例一: 例二: 例三: DP和…

使用ExLlamaV2在消费级GPU上运行Llama2 70B

Llama 2模型中最大也是最好的模型有700亿个参数。一个fp16参数的大小为2字节。加载Llama 270b需要140 GB内存(700亿* 2字节)。 只要我们的内存够大,我们就可以在CPU上运行上运行Llama 2 70B。但是CPU的推理速度非常的慢,虽然能够运行,速度我…

postgresql-管理数据表

postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中,使用 CREATE TABLE 语句创建一个新表: CREATE TABLE …

量化交易全流程(四)

本节目录 数据准备(数据源与数据库) CTA策略 数据源: 在进行量化分析的时候,最基础的工作是数据准备,即收集数据、清理数据、建立数据库。下面先讨论收集数据的来源,数据来源可分为两大类:免…

nodejs开发环境搭建

Nodejs是一个开源的、跨平台JavaScript运行时环境,其使用V8引擎对JavaScript脚本执行解释,在前后端分离的应用架构设计中,其既能支持web页面服务应用的开发、也能支持后端接口服务应用的开发,类似于Java语言的J2EE运行时环境&…

Django基础入门操作 (Django-01)

一 背景介绍 Django是一个开源的 Web应用框架,由Python写成。采用了MTV的框架模式,它最初是被用来做CMS(内容管理系统)软件。 官方中文文档:Django 文档 | Django 文档 | Django 应用:做内容管理系统(新…

Swing程序设计(4)JLabel标签和导入图片

文章目录 前言一、JLabel标签 1.介绍2.实例展示二、JLabel中绘图和导入图片 1.自定义绘图2.导入图片总结 前言 本文介绍了Swing程序中JLabel标签的使用,以及在标签中导入图片和自定义图标的方法。 一、JLabel标签的使用 1.介绍 JLabel标签:在Swing程序中…

【生物信息学】计算图网络中节点的中心性指标:聚集系数、介数中心性、度中心性

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 3. IDE 三、实验内容 0. 导入必要的工具 1. 生成邻接矩阵simulate_G: 2. 计算节点的聚集系数 CC(G): 3.计算节点的介数中心性 BC(G) 4. 计算节点的度中心性 DC(G) 5. 综合centrality(G) 6. 代…

基于web的画作展示系统/作品展示平台

摘 要 网络的广泛应用给生活带来了十分的便利。所以把画作展示系统与现在网络相结合,利用JSP技术建设画作展示系统,实现画作展示系统的信息化。则对于进一步提高画作展示系统的发展,丰富画作展示系统经验能起到不少的促进作用。 画作展示系统…

NLP中token总结

Token 可以被理解为文本中的最小单位。在英文中,一个 token 可以是一个单词,也可以是一个标点符号。在中文中,通常以字或词作为 token。ChatGPT 将输入文本拆分成一个个 token,使模型能够对其进行处理和理解 在自然语言处理&#…

【QT】自定义组件ui类添加到主ui界面方法

1.添加自定义组件到项目中 add new选择如下 写好类方法,确定即可 2.将新创建的ui类加入到主ui界面 选中新创建ui类的父类空块,右键选择提升为 选择并添加新创建的类

asp.net core mvc 文件上传,下载,预览

//文件上传用到了IformFile接口 1.1文件上传视图 <form action"/stu/upload" method"post" enctype"multipart/form-data"><input type"file" name"img" /><input type"submit" value"上传&…

【通意千问】大模型GitHub开源工程学习笔记(2)--使用Qwen进行推理的示例代码解析,及transformers的库使用

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…

多目标平衡优化器黏菌算法(MOEOSMA)求解CEC2020多模式多目标优化

多目标平衡优化器黏菌算法&#xff08;MOEOSMA&#xff09;比现有的多目标黏菌算法具有更好的优化性能。在MOEOSMA中&#xff0c;动态系数用于调整勘探和开采趋势。采用精英存档机制来促进算法的收敛性。使用拥挤距离法来保持Pareto前沿的分布。采用平衡池策略模拟黏菌的协同觅…

【深度学习实验】卷积神经网络(六):自定义卷积神经网络模型(VGG)实现图片多分类任务

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集&#xff08;CIFAR10Dataset&#xff09; a. read_csv_labels&#xff08;&#xff09; b. CIFAR10Dataset 2. 构建模型&#xff08;FeedForward&…

前端页面初步开发

<template><div><el-card class"box-card" style"height: 620px"><el-input v-model"query.name" style"width:200px" placeholder"请输入用户姓名"></el-input>&nbsp&nbsp&nbsp…

贪心找性质+dp表示+矩阵表示+线段树维护:CF573D

比较套路的题目 首先肯定贪心一波&#xff0c;两个都排序后尽量相连。我一开始猜最多跨1&#xff0c;但其实最多跨2&#xff0c;考虑3个人的情况&#xff1a; 我们发现第3个人没了&#xff0c;所以可以出现跨2的情况 然后直接上dp&#xff0c;由 i − 1 , i − 2 , i − 3 i…

input输入表头保存excel文件

input输入表头 input输入表头 &#xff08;input内除了/&#xff0c;空格 回车 标点符号等 全部作为单元格分隔符&#xff09;保存/storage/emulated/0/代码文件/ 没有就创建文件名命名方法&#xff1a;编号. 库 时间戳嗨&#xff01;听说你有个需求&#xff0c;想根据用户输入…

数码产品数码配件无线键盘等出口欧盟CE-RED认证测试办理

数码产品数码配件无线键盘CE-RED认证测试办理 无线产品CE-RED认证进入东欧市场规定&#xff1a; 在通信终端设备和无线产品在这些/地区合法销售之前&#xff0c;必须按照 RED 指令进行测试&#xff0c;并且还必须提供 CE 标志。无线远程控制产品必须符合 RED 指令的 REDEU 要…

2021-06-18 51蛋骗鸡实现流水灯累积点亮全亮后闪烁从头开始循环

缘由怎么在单片机上实现这个功能呢_有问必答-CSDN问答 #include "REG52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; sbit K4 P1^4; //sbit LED1P1^0; //sbit LED2P1^1; //sbit LED3P1^2; //sbit LED4P1^3; bit k1; unsigned char code SmZiFu[]{63,6,91,79,…