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.xdnf.cn/news/147405.html

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

相关文章

用于自然语言处理的 Python:理解文本数据

一、说明 Python是一种功能强大的编程语言,在自然语言处理(NLP)领域获得了极大的普及。凭借其丰富的库集,Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中,我们将介绍 Python for NLP 的一些基础知识&…

2023 彩虹全新 SUP 模板,卡卡云模板修复版

2023 彩虹全新 SUP 模板,卡卡云模板,首页美化,登陆页美化,修复了 PC 端购物车页面显示不正常的问题。 使用教程 将这俩个数据库文件导入数据库; 其他的直接导入网站根目录覆盖就好; 若首页显示不正常&a…

计算机网络学习易错点(持续更新~~~)

目录 概述 1.internet和Internet的区别 2.面向连接和无连接 3.不同的T 4.传输速率和传播速率 5.传播时延和传输时延(发送时延) 6.语法,语义和同步 一.物理层 1.传输媒体与物理层 2.同步通信和异步通信 3.位同步(比特同…

nginx多文件组织

背景: nginx的话,有时候,想部署多个配置,比如:使用不同的端口配置不同的web工程。 比如:8081部署:项目1的web页面。 8082部署:项目2的web页面。 1)nginx.conf worker_processes…

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好? 对目前市场上前三个数据分析师证书进行审查和比较|Madison Hunter 似乎每个重要的公司都推出了自己版本的同一事物:专业数据分析师认证,旨在使您成为雇主的下一个热门商品。 随着…

7.JavaScript-vue

1 JavaScript html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习JavaScript,这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过代码/js效果演示提供资料进行效果演…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石⑤

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石⑤ 第十九章 驱动程序基石⑤19.9 mmap19.9.1 内存映射现象与数据结构19.9.2 ARM架构内存映射简介19.9.2.1 一级页表映射过程19.9.2.2 二级页表映射过程 19.9.3 怎么给APP新建一块内存映射19.9.3.1 mmap调用过程19.9.3.2 cach…

华为云云耀云服务器L实例评测|部署在线轻量级备忘录 memos

华为云云耀云服务器L实例评测|部署在线轻量级备忘录 memos 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品优势1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 memos3.1 memos介绍3.2 Docker 环境搭建…

C语言数组

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 runoob0、runoob1、...、runoob99,而…

Scala第十章

Scala第十章 章节目标 1.数组 2.元组 3.列表 4.集 5.映射 6.迭代器 7.函数式编程 8.案例:学生成绩单 scala总目录 文档资料下载

Jmeter分布式压力测试

目录 1、场景 2、原理 3、注意事项 4、slave配置 5、master配置 6、脚本执行 1、场景 在做性能测试时,单台机器进行压测可能达不到预期结果。主要原因是单台机器压到一定程度会出现瓶颈。也有可能单机网卡跟不上造成结果偏差较大。 例如4C8G的window server机…

防火墙基础之H3C防火墙分支与分支之间双向地址转换

分支与分支之间双向地址转换 原理概述: 防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资…

029-从零搭建微服务-消息队列(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

ARP和DDOS攻击防御介绍

ARP攻击如何产生的? ARP如何进行有效的防御? ARP地址解析协议 已知对方ip地址,求得对方mac地址 交换机会自动学习: 当pc1想访问外网,会向外发一个广播包,交换机会收到一个广播包 ARP地址表: …

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石②

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石② 第十九章 驱动程序基石②19.3 异步通知19.3.1 适用场景19.3.2 使用流程19.3.3 驱动编程19.3.4 应用编程19.3.5 现场编程19.3.6 上机编程19.3.7 异步通知机制内核代码详解 19.4 阻塞与非阻塞19.4.1 应用编程19.4.2 驱动编程…

简历项目优化关键方法论-START

START方法论是非常著名的面试法则,经常被面试官使用的工具 Situation:情况、事情、项目需求是在什么情况下发生Task:任务,你负责的做的是什么Action:动作,针对这样的情况分析,你采用了什么行动方式Result:结果,在这样…

nodejs+vue流浪猫狗救助领养elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性:技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性: 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…

XDM,10.1

XDM,今天是国庆,就没有其他啥事情,祝大家国庆节快乐,玩的开心。 这两天放假也有时间捣鼓自己的事情了,挺开心的,第一件事就是把自己的一个小开发板修好了,然后自己的小os也能跑了几个假的线程。…

Monkey测试

一:测试环境搭建 1:下载android-sdk_r24.4.1-windows 2:下载Java 3:配置环境变量:关于怎么配置环境变量(百度一下:monkey环境搭建,) 二:monkey测试&#xff1…

UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow 效果: 代码: #include "me.hpp" #include <NXOpen/ListingWindow.hxx> #include <…