服务的消费方式和服务熔断

news2025/1/21 18:44:04

目录

1. 服务消费方式

1.1 RestTemplate

1.2 feign

2. 服务熔断(降级)

2.1 在微服务架构中服务熔断的必要性

健康的微服务集群:

​编辑

出现故障:

​编辑 

 系统雪崩:

​编辑

2.2 hystrix

2.3 hystrix的使用


1. 服务消费方式


1.1 RestTemplate


传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate

示例:

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApp {


    //启用负载均衡
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            System.out.println("服务消费者 .......... ");
            return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
        }
    }


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

}

1.2 feign


feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

1)导入包


        <!-- 声明式服务调用 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2)SpringbootApplication启动类加上@EnableFeignClients 


 3)定义服务接口


 

4)使用Feign接口


@RestController
public class TestController {

	private final RestTemplate restTemplate;

	@Autowired
	public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

	@Autowired
	private ProviedService proviedService;

	@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
	public String echo(@PathVariable String str) {
		System.out.println("服务消费者 .......... ");
		//return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
		return proviedService.echo(str);
	}
}

2. 服务熔断(降级)


2.1 在微服务架构中服务熔断的必要性


在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断


熔断机制相当于生活中的比较接近的例子就是电容丝,在用电量过载时会发生熔断,以避免灾难性的后果。在微服务架构中往往会包含大量的微服务,且这些微服务之间会发生互相调用,如果此时某个微服务发生故障,则可能产生连锁反应,在一些资料中将这种现象称为微服务雪崩。为了避免这种情况的发生就有了微服务调用的熔断机制,这种机制可以对发生问题的服务及时进行隔离,避免微服务雪崩的出现。

健康的微服务集群:


出现故障:



 

 系统雪崩:


注: 在进行微服务的设计时,不要出现循环依赖。 

2.2 hystrix


在springclound中熔断器的的组件是Hystrix,是Netflix套件的一部分。其作用是在微服务相互调用中出现故障时,对故障进行隔离,使得故障不至于蔓延到中分布式系统。

2.3 hystrix的使用


1)导入需要的依赖包


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

Feign已经集成了对Hytrixde支持,所以不用专门导入Hytrix依赖。如果不是在Feign中使用熔断器,则需要导hystrix依赖,例如下面要讲到的ribbon。

2)配置文件


# 开启熔断功能
feign.hystrix.enabled=true

3)编写熔断事件发生时的处理程序


@Component
public class ProviedServiceFallback implements ProviedService{

    @Override
    public String echo(String msg) {
        return " provied fail ..... " + msg;
    }
}
  1. 在feign接口中配置熔断

@FeignClient(name="service-provider",fallback = ProviedServiceFallback.class)
public interface ProviedService {

    @RequestMapping(value="/echo/{string}",method = RequestMethod.GET)
    String echo(@PathVariable("string") String msg);

}

注:重启消费者,然后关闭提供者,再去nacos中刷新,最后去调用postman中的方法即可

 

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

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

相关文章

[Linux]多线程的同步和互斥(线程安全 | 互斥锁 | 死锁 | 条件变量)

文章目录Linux线程互斥进程线程间的互斥相关背景概念互斥量mutex互斥量的接口初始化互斥量销毁互斥量互斥量的加锁和解锁互斥量实现原理可重入vs线程安全常见线程不安全情况常见线程安全的情况常见不可重入的情况常见可重入的情况可重入与线程安全的联系可重入与线程安全的区别…

你易忽略的三极管电路问题1:下拉电阻

如下这个三极管共射极驱动电路中&#xff0c;B、E极之间的下拉电阻的作用&#xff1f;是否可以将其去除&#xff1f;该电阻有两个重要的作用&#xff1a;在驱动信号关闭时给三极管基极一个固定的电平。当驱动信号&#xff08;SIGNAL&#xff09;关闭时&#xff0c;若没有下拉电…

搭建Python环境(~保姆级别服务~)

文章目录前言一、搭建 Python 环境安装Python1. 找到官方网站2. 找到下载页面3. 双击安装包4. 运行 hello world安装PyCharm1. 找到官方网站2. 找到下载页面3. 双击安装包4. 运行 hello world创建一个项目选择项目所在的位置, 并选择使用的 Python 解释器.创建文件4. 编写代码5…

emoji与UTF-16、UCS-4、unicode的关系、原理和换算

emoji与UTF-16、UCS-4、unicode的关系、原理和换算 目录 emoji与UTF-16、UCS-4、unicode的关系、原理和换算 一、Unicode字符集概述 二、原理 1、UTF-16、UCS-4、unicode 2、emoji表情字符标准 3、关于肤色 一、Unicode字符集概述 https://en.wikipedia.org/wiki/Emoj…

【Python机器学习】标注任务与序列问题讲解(图文解释)

标注模型用于处理有前后关联关系的序列问题。在预测时&#xff0c;它的输入是一个观测序列&#xff0c;该观测序列的元素一般具有前后的关联关系。它的输出是一个标签序列&#xff0c;也就是说&#xff0c;标注模型的输出是一个向量&#xff0c;该向量的每个元素是一个标签&…

VScode ChatGPT 的中文插件安装使用

ChatGPT 的中文插件 由于官方服务对服务的封禁&#xff0c;大量国内代理服务全军覆没。开发者经过千辛万苦&#xff0c;找到了一个beta模型&#xff0c;目前作为 ChatGPT 正式服务上线前的过渡方案&#xff0c;供大家使用 插件安装后即处于”国内模式“&#xff0c;国内模式开…

艾美捷Annexin V-FITC凋亡检测试剂盒流式细胞术方案

FITC标记的重组人膜联蛋白V显示亮绿色荧光&#xff08;Ex&#xff08;max&#xff09;:488nm&#xff0c;Em&#xff08;max&#xff09;:530nm&#xff09;。 艾美捷Annexin V-FITC凋亡检测试剂盒化学性质&#xff1a; 应用&#xff1a;流式细胞术、荧光显微镜、荧光检测 应…

LncFinder | 非编码RNA的识别与分析神器!!!~

1写在前面 非编码RNA(ncRNAs), 是指不编码蛋白质的RNA。&#x1f617; 其中包括rRNA&#xff0c;tRNA&#xff0c;snRNA&#xff0c;snoRNA, lncRNA和miRNA等多种已知功能的RNA&#xff0c;还包括未知功能的RNA。&#x1f913; 长链非编码RNA&#xff08;lncRNA&#xff09;指的…

35. 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…

机器学习100天(十六):016 逻辑回归损失函数

机器学习 100 天,今天讲的是:逻辑回归损失函数。 一、如何找到最佳分类直线 讲完了逻辑回归基本原理之后,我们再来思考一个非常关键的问题:就是如何找到最佳的分类直线呢? 如图中所示,如何判断这三条直线哪个更好?线性回归里,我们可以用均方误差作为损失函数,选择均…

非零基础自学Golang 第14章 反射 14.4 反射三定律

非零基础自学Golang 文章目录非零基础自学Golang第14章 反射14.4 反射三定律14.4.1 接口到反射类型的转换14.4.2 反射到接口类型的转换14.4.3 修改反射类型对象第14章 反射 14.4 反射三定律 在使用反射时&#xff0c;牢记这三条定律会让你对反射有更加清晰的认识。 14.4.1 接…

网络攻防中如何在海量虚假IP中找到目标服务或者设备的真实IP地址

网络攻防中如何在海量虚假IP中找到目标服务或者设备的真实IP地址。 Fav-up是一款功能强大的IP查询工具,该工具可以通过Shodan和Favicon(网站图标)来帮助研究人员查询目标服务或设备的真实IP地址。 工具安装 首先,该工具需要本地设备安装并部署好Python 3环境。然后广大研究…

5 | 如何更换证书

目录1 操作场景2 操作类型2.1 更换自有证书2.2 腾讯云托管证书2.3 一键替换证书3 结果校验1 操作场景 如果证书已过期&#xff0c;用户在浏览网站的时候会显示证书不可信&#xff1b; 2 操作类型 2.1 更换自有证书 登录 Web 应用防火墙控制台&#xff0c;在左侧导航中&…

load_ext是干什么的(autotime,autoreload)

文章目录load_extautotimeautoreload声明&#xff1a;本文都是自己的理解。 load_ext load_ext是jupyter notebook中的一个命令&#xff0c;而jupyter notebook和Ipython几乎可以等同。那load_ext作用是什么呢&#xff1f;我感觉作用就是类似于import。 load_extload extenst…

单片机AT89C51六位数码管秒表

详细代码讨论加我QQ&#xff1a;1271370903 1.1设计目的 本设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理&#xff0c;结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来&#xff0c;使得系统能够实…

【Unity大气渲染】关于单次大气散射的理论知识

参考 最近在实现程序化天空盒&#xff0c;到了实现大气散射这一步&#xff0c;索性查漏补缺&#xff0c;把大气散射这块儿的理论知识补充明白了。跟着【实战】从零实现一套完整单次大气散射_一的推荐&#xff0c;学习这块我直接从Volumetric Atmospheric Scattering啃起。 补…

平安夜,愿大家平安健康!

12月24日平安夜(Christmas Eve)&#xff0c;是圣诞节前夕的晚上&#xff0c;寓意着耶稣诞生的夜晚会给世人带来平安幸福。 据《圣经》记载&#xff0c;耶稣诞生的那一晚&#xff0c;在旷野看守羊群的牧羊人&#xff0c;突然听见有声音自天上传来&#xff0c;向他们报耶稣降生的…

华为云桌面能为设计行业提供哪些“黑科技”?

华为云桌面能为设计行业提供哪些“黑科技”&#xff1f; 如今&#xff0c;传统设计模式中的软硬件更新迭代成本高、团队协作低效、资产利用率低和上下游进步不同步等缺陷日益显露&#xff0c;已经不能适应市场需求。华为云桌面携手赞奇科技打造出一个全方位的一站式云上内容制作…

[内网渗透]—GPO批量控制域内主机

GPO GPO(组策略管理),用来存储Active Directory中的策略。 自Windows Server2008开始,GPO开始支持计划任务,便于管理域中的计算机和用户,默认情况下,域用户的组策略每90分钟更新一次,但会随机偏移0-30分钟,域控制器的组策略每5分钟刷新一次 应用场景 在拿到域控后,…

数字硬件建模SystemVerilog-组合逻辑建模(3)使用函数表示组合逻辑

数字门级电路可分为两大类&#xff1a;组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点&#xff0c;在后面会作为单独的主题处理。组合逻辑描述了门级电路&#xff0c;其中逻辑块的输出直接反映到该块的输入值的组合&#xff0c;例如&#xff0c;双输入AND门的输出…