IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud常见组件说明 -> 正文阅读

[Java知识库]SpringCloud常见组件说明

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

spring cloud(spring家族的顶级框架)将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路 由,负载均衡,熔断器,控制总线,集群状态等等功能。

Eureka:注册中心----收集ip端口并对外提供

服务的提供方和获取方都需要将自己的ip和端口注册到Eureka中,服务提供方需要向Eureka发送心跳续约刷新自己的状态,获取方再通过工具类DiscoveryClient动态获取提供方的ip和端口,获取到多个ip 端口后需要进行选择(负载均衡)。在这里插入图片描述

EurekaServer的高可用

为了保障获取服务的稳定性,单个Eureka服务不足以保障,所以需要开启 Eureka集群
在Eureka注册中心再开启一个端口,并且新端口需要注册到Eureka,多个Eureka Server之间也会互相注册,当服务提供者注册到Eureka Server集群中的某个节点时,该节点会 把服务的信息同步给集群中的每个节点,从而实现数据同步


Ribbon(负载均衡)----从多个服务提供者中选择一个

为Rinnon配置服务提供者的地址后,Ribbon就根据负载均衡算法自动帮服务调用者请求,其内置了轮询、随机、权重等算法,同样也可以自定义发在均衡算法
Ribbon默认的负载均衡策略是轮询。
开启Ribbon:服务调用方在微服务自动装配RestTemplate方法添加注解@LoadBalance。
RestTemplate获取url不用ip端口而替换为服务名,Ribbon会自动去Eureka调用端口(负载均衡算法)

Hystrix(降级/熔断)----服务故障、超时。采用熔断降级策略

微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路。如果有服务发生异常导致请求阻塞,则tomcat的线程不会释放,请求越多阻塞的线程越多最后超出服务器的承载范围后导致其他服务也不可用。

  • Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加 速失败判定时间。
  • 用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超 时,则会进行降级处理

服务降级:请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,返回一个执行结果(例如返回友好的提示信息)。

启动降级:服务调用方的启动类添加注解@EnableCircuitBreaker,启动所有的熔断降级

Circuit Breaker 熔断

在这里插入图片描述
在分布式系统中应用服务熔断后;服务调用方 可以自己进行判断哪些服务反应慢或存在大量超时,可以针对这些服务进行主动熔断,防止整个系统被拖垮。 Hystrix的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后,可以自动重连。
Hystrix的三种状态:

  • 关闭(保险丝完好,能正常访问服务)
  • 打开(保险丝断开20次后完全断开,不会再访问服务)
  • 半开(完全断开后默认5s访问服务,成功访问就关闭,不成功则完全断开)
    ![circuitBreak流程](https://img-blog.csdnimg.cn/c2b951de37ce4857bed9bf743ad36637.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5biD5pel5biD6IiS5a-M5pav5Z-6,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

Feign(服务调用)----调用其他微服务的工具

简化了远程调用时的代码;Feign可以把Rest的请求伪装成类似Controller。不用拼接url、参数等操作,一切都交给Feign。

开启Feign:在服务调用方启动类添加注解@EnableFeignClients

代理接口:代理接口添加注解@FeignClient(“service name”),Feign会通过动态代理生成实现类;接口中的方法采用SpringMVC注解,Feign会根据注解生成URL并访问获取结果

负载均衡:Feign中本身已经集成了Ribbon依赖和自动配置

开启降级/熔断:Feign内置Hystrix会自动熔断,但是如果想要降级,需要配置开启。降级类需要继承代理类复写被降级方法,然后在代理类中,指定刚才编写的实现类

Gateway(网关)----路由和过滤

Gateway是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息, 从而加强安全保护在这里插入图片描述不管是来自于客户端的请求,还是服务内部调用。一切对服务的请求都可经过网关,然后再由网关来实现鉴权、动态路由等操作。
在这里插入图片描述

面向服务的路由

路由规则中,路径对应的服务地址写死了!如果同一服务有多个实例的话,这样做显然不合理。

 routes:
 - id: user-sevice-route # 路由id
    uri: lb://user-service  # 面向服务的路由,使用lb协议网关将根据服务名解析出地址并进行负载均衡

    # 路由配置中uri所用的协议为lb时(以uri: lb://user-service为例),
    # gateway将使用 LoadBalancerClient把 user-service通过eureka解析为实际的主机和端口 并进行ribbon负载均衡。
    predicates:
       - Path=/user/**  # 路由断言,配置映射路径(请求中带有user的路径会被代理到user-service)
     

过滤器

请求鉴权,通过网关提供的过滤器来实现。
常见自带过滤器:
- AddRequestHeader:

 spring:
	cloud:
		gateway:
			 routes:
			 - id: user-sevice-route 
			    uri: lb://user-service  
			    predicates:
			      - Path=/api/user/**
			     # 过滤器
			    filters:
			      # - PrefixPath=/user  # 添加请求路径的前缀,在/**请求前添加/user前缀
			      - StripPrefix=1 # 1表示过滤前一个前缀,将/api/user/**的/api前缀删除
			      # 自定义过滤器
			      - MyParam=name  # 过滤器名=要拦截的参数名
			   	# 全局默认过滤器,对所有路由生效
			    default-filters:
			      - AddResponseHeader=AddResponseHeader, aheader # 添加响应头,key,value
			      - AddResponseHeader=AddHeader, head

跨域配置

跨域:在js请求访问中,如果访问的地址与当前服务器的域名、ip或者端口号不一致则称为跨域请求。若不解决则 不能获取到对应地址的返回结果。

# 配置跨域
spring:
	cloud:
		gateway:
			globalcors:
			  cors-configurations:
			    '[/**]':  # 所有访问网关服务的请求地址
			      allowedOrigins: *  # 指定允许跨域的请求(允许所有请求)
			      allowedMethods: # 允许跨域的请求方式
			        - GET

Gateway与Feign的区别

gateWay作为整个应用的入口,接受所有请求,将不同的请求转发至不同的处理微服务模块
Feign将当前微服务的部分服务接口暴露出来,并且主要用于各个微服务之间的服务调用

Spring Cloud Config(分布式配置中心)----配置中心

在分布式系统中,由于服务数量非常多,配置文件分散在不同的微服务项目中,管理不方便。为了方便配置文件集 中管理,需要分布式配置中心组件。在Spring Cloud中,提供了Spring Cloud Config,它支持配置文件放在配置服 务的本地,也支持放在远程Git仓库在这里插入图片描述
创建配置中心:服务中心application需要添加@EnableConfigServer注解开启配置服务

配置文件:

spring:
	cloud:
	  config:
	    server:
	      git:
	        uri: https://gitee.com/dengtahost/spring-cloud-demo.git  # 远程仓库地址

客户端获取远程配置bootstrap.yml:

spring:
  cloud:
    config:
      # 配置文件的命名方式:{application}-{profile}.yml
      name: user  # 与仓库中的配置文件的application一致
      profile: dev  # 与仓库中的profile一致
      label: master # 与仓库中版本分支一致
      discovery:
        enabled: true # 使用配置中心
        service-id: config-service  # 配置中心服务名
eureka:
  client:
    service-url:
      defaultZone:  http://127.0.0.1:10086/eureka # 注册到eureka

application.yml与bootstrap.yml区别:

bootstrap也是spring boot 默认配置,加载早于application
bootstrap是系统级配置相对固定,application是应用级配置易变更

Spring Cloud Bus(服务总线)

微服务中的配置文件集中存储在远程Git仓库,并且通过配置中心微服务从Git仓库拉取配置文 件, 当用户微服务启动时会连接配置中心获取配置信息从而启动用户微服务。但更新Git仓库中的配置文件只有重启用户微服务才能生效。
Spring Cloud Bus可以在不重启微服务的情况下更新配置
在这里插入图片描述
在配置中心的application配置文件添加消息代理

spring:
	rabbitmq:
	    host: localhost
	    port: 5672
	    username: guest
	    password: guest
management:
  endpoints:
    web:
      exposure:
        include:  bus-refresh # 暴露触发消息总线的地址

在用户微服务bootstrap配置文件添加消息代理

spring:
	rabbitmq:
	    host: localhost
	    port: 5672
	    username: guest
	    password: guest

在用户微服务启动类添加@Reference注解

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:31:58  更:2021-09-22 14:34:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:16:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码