百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

史上最简单的SpringCloud教程 springcloud入门教程

yuyutoo 2024-10-12 01:40 6 浏览 0 评论

一、断路器简介

Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:

较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。

断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

二、准备工作

这篇文章基于上一篇文章的工程,首先启动上一篇文章的工程,启动eureka-server 工程;启动service-hi工程,它的端口为8762。

三、在ribbon使用断路器

改造serice-ribbon 工程的代码,首先在pox.xml文件中加入spring-cloud-starter-hystrix的起步依赖:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

在程序的启动类ServiceRibbonApplication 加@EnableHystrix注解开启Hystrix:

@SpringBootApplication

@EnableDiscoveryClient

@EnableHystrix

public class ServiceRibbonApplication {

public static void main(String[] args) {

SpringApplication.run(ServiceRibbonApplication.class, args);

}

@Bean

@LoadBalanced

RestTemplate restTemplate() {

return new RestTemplate();

}

}

改造HelloService类,在hiService方法上加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,熔断方法直接返回了一个字符串,字符串为"hi,"+name+",sorry,error!",代码如下:

@service

public class HelloService {

@Autowired

RestTemplate restTemplate;

@HystrixCommand(fallbackMethod = "hiError")

public String hiService(String name) {

return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);

}

public String hiError(String name) {

return "hi,"+name+",sorry,error!";

}

}

启动:service-ribbon 工程,当我们访问http://localhost:8764/hi?name=forezp,浏览器显示:

hi forezp,i am from port:8762

此时关闭 service-hi 工程,当我们再访问http://localhost:8764/hi?name=forezp,浏览器会显示:

hi ,forezp,orry,error!

这就说明当 service-hi 工程不可用的时候,service-ribbon调用 service-hi的API接口时,会执行快速失败,直接返回一组字符串,而不是等待响应超时,这很好的控制了容器的线程阻塞。

四、Feign中使用断路器

Feign是自带断路器的,在D版本的Spring Cloud中,它没有默认打开。需要在配置文件中配置打开它,在配置文件加以下代码:

feign.hystrix.enabled=true

基于service-feign工程进行改造,只需要在FeignClient的SchedualServiceHi接口的注解中加上fallback的指定类就行了:

@FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class)

public interface SchedualServiceHi {

@RequestMapping(value = "/hi",method = RequestMethod.GET)

String sayHiFromClientOne(@RequestParam(value = "name") String name);

}

SchedualServiceHiHystric需要实现SchedualServiceHi 接口,并注入到Ioc容器中,代码如下:

@Component

public class SchedualServiceHiHystric implements SchedualServiceHi {

@Override

public String sayHiFromClientOne(String name) {

return "sorry "+name;

}

}

启动四servcie-feign工程,浏览器打开http://localhost:8765/hi?name=forezp,注意此时service-hi工程没有启动,网页显示:

sorry forezp

打开service-hi工程,再次访问,浏览器显示:

hi forezp,i am from port:8762

这证明断路器起到作用了。

五、Hystrix Dashboard (断路器:Hystrix 仪表盘)

基于service-ribbon 改造,Feign的改造和这一样。

首选在pom.xml引入spring-cloud-starter-hystrix-dashboard的起步依赖:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>

</dependency>

在主程序启动类中加入@EnableHystrixDashboard注解,开启hystrixDashboard:

@SpringBootApplication

@EnableDiscoveryClient

@EnableHystrix

@EnableHystrixDashboard

public class ServiceRibbonApplication {

public static void main(String[] args) {

SpringApplication.run(ServiceRibbonApplication.class, args);

}

@Bean

@LoadBalanced

RestTemplate restTemplate() {

return new RestTemplate();

}

}

打开浏览器:访问http://localhost:8764/hystrix,界面如下:

点击monitor stream,进入下一个界面,访问:http://localhost:8764/hi?name=forezp

此时会出现监控界面:

相关推荐

如何安装、启动和退出python,大小写是否一样?

1.1Python简介人类在多年前已经进入信息化时代。事实上,我们如今是淹没在信息的海洋之中,时时刻刻都有大量的电子邮件需要阅读或太多的网页亟待浏览。互联网提供了大量关于任何事物的信息,从重要的事件...

最基础的Python知识,学会这些已足够你开始写Python代码了

本章主要内容缩进和代码块构建识别注释给变量赋值对表达式求值使用常见数据类型获取用户输入选用正确的Python式编码风格本章介绍最基础的Python知识,包括如何使用赋值和表达式、如何输入数字或字符串、...

python散装笔记——89: 引发自定义错误/异常

Python有许多内置异常,当程序中出现问题时,这些异常会强制程序输出错误信息。...

Python:数据的归宿_python数据类型有哪些?

"一起学习,一起成长!"1.文件输入/输出(普通文件)数据持久化最简单的类型是普通文件,又叫平面文件(flatfile)。它仅仅是在一个文件名下的字节流,把数据从一个文件读入内容,然后从内存写入文件...

一图看懂 Python 2 / Python 3 编码 | CSDN 博文精选

作者|天元浪子责编|刘静出品|CSDN博客无论是PY2还是PY3,都使用Unicode作为内存编码,简称内码。保存在Python解释器内存中的文本,输出到屏幕、编辑器,或者保存成文件的时候...

Python 基础教程四之Python3 元组

前言Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号(),列表使用方括号[]。...

潍坊这个小镇210年前曾被德国侵略过,如今在静静的等待你的到来……

潍坊,有个坊茨小镇。这小镇,每一扇门里都是历史,每一扇窗里都有教诲。历史的缠绵、封存的记忆,我们沿着这条脉搏,去寻找那里曾经发生的故事。ThereisatowninWeifangcalle...

一文掌握Python 生成器_python3 生成器

ython生成器有助于实现维护持久状态的功能。这支持增量计算和迭代。此外,可以使用生成器代替数组以节省内存。这是因为生成器不存储值,而是存储具有函数状态的计算逻辑,类似于准备触发的未计算函数实例。...

程序员的福音,C/C++内存泄漏的终极解决方案

众所周知,C/C++执行效率高,但难以驾驭,开车一时爽,但稍不留神容易翻车。估计每个C/C++程序员都遭受过内存泄漏的困扰。本文提供一种通过wrapmalloc查找memoryleak的思路,使得...

python散装笔记——103: 调试_终极笔记

1:通过IPython和ipdb如果安装了IPython(或Jupyter),调试器可以使用...

美人计|喷香水太浓触发报警?咱夏天要用清新的

昨天下午河南一行驶中的高铁因为某乘客喷了高浓度的香水,自动停运了……妹子们,夏季本就容易燥,选几款清淡型的香氛吧。香水其实是很个性很私人的,不同的心情和状态下想使用的味道也会不同,但同时每个人又都是社...

2022年5月19日学习笔记-基础语法_基础语法题库

Python学习笔记-基础语法第七章用户输入和while循环...

时髦办|度假我只带了一条丝巾,却拍出了365个造型

是不是一提到丝巾,都认为丝巾和小年轻不太配?其实丝巾才是真正的百搭神器,可以完整你的各种look!今天COCO就来带大家看看风情十足的丝巾可以怎样轻松地融入到各位的搭配之中吧!没错,时尚博主和明星们都...

感恩节之后的黑色星期五由来_黑五感恩节是什么意思

弗雷德英语笔记跨学科深度学习...

荧幕上的经典表白,521表白素材来了丨Day84

抖音:谭剑波考研英语微博:谭剑波tangible唱吧:tangible1982...

取消回复欢迎 发表评论: