SpringCloud之熔断器Hystrix(二)
# 开启断路器
enabled: true
断路器要主动开启,服务调用失败时才会熔断
此处有一个坑,把此配置写到 application.yml 中熔断不会生效
application.properties 和 bootstrap.yml 二选一就行
服务工程 A - controller 前端控制器(提供服务)
package com.zwc.a.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*
* @ClassName ASayHelloController
* @Desc TODO Say Hello
* @Date 2019/5/20 23:24
* @Version 1.0
*/
@RestController
public class ASayHelloController {
/*
* @ClassName ASayHelloController
* @Desc TODO 读取配置文件中的端口
* @Date 2019/5/20 23:24
* @Version 1.0
*/
@Value("${server.port}")
private String port;
/*
* @ClassName ASayHelloController
* @Desc TODO Say Hello
* @Date 2019/5/20 23:24
* @Version 1.0
*/
@RequestMapping("/a")
public String a(){
return "Hello!I'm a. port:" + port;
}
}
提供一个服务:输出 Hello 和端口
服务工程 A - 服务调用
package com.zwc.a.api.feign;
import com.zwc.a.api.impl.FeignApiFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/*
* @ClassName FeignApi
* @Desc TODO 使用 Feign 调用 b - 接口
* @Date 2019/5/20 23:21
* @Version 1.0
*/
@FeignClient(value = "hystrix-b" , fallback = FeignApiFallBack.class)
public interface FeignApi {
/*
* @ClassName FeignApi
* @Desc TODO 通过 hystrix-b 服务名调用 b() 方法
* @Date 2019/5/20 23:21
* @Version 1.0
*/
@RequestMapping("/b")
String b();
}
通过 @FeignClient 注解中 value = "hystrix-b" 来指定调用哪个服务
hystrix-b 就是提供者的 spring.application.name:应用名称
通过 @FeignClient 注解中 fallback = FeignApiFallBack.class 来指定熔断时调用的方法
FeignApiFallBack 就是此类(FeignApi)的实现类,对应的实现方法就是此类的熔断时调用的方法
b():此方法是 B 工程中提供的服务,在这里定义成接口
注意要与提供者具有相同返回值,相同方法名以及相同参数
服务工程 A - Fallback(FeignApiFallBack)
package com.zwc.a.api.impl;
import com.zwc.a.api.feign.FeignApi;
import org.springframework.stereotype.Component;
/*
* @ClassName FeignApi
* @Desc TODO fallback
* @Date 2019/5/20 23:21
* @Version 1.0
*/
@Component
public class FeignApiFallBack implements FeignApi {
/*
* @ClassName FeignApiFallBack
* @Desc TODO 调用 hystrix-b 服务中的 b() 方法失败时执行
* @Date 2019/5/20 23:31
* @Version 1.0
*/
@Override
public String b() {
return "Hello!aUseB fail";
}
}
使用 @Component 注解把此类交给 Spring 管理
实现了 FeignApi 接口,提供熔断时对应的方法
服务工程 A - controller 前端控制器(消费服务)
package com.zwc.a.controller;
import com.zwc.a.api.feign.FeignApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*
* @ClassName AUseBFeignController
* @Desc TODO 使用 Feign 调用 b - 前端控制器
* @Date 2019/5/20 23:23
* @Version 1.0
*/
@RestController
public class AUseBFeignController {
@Autowired(required = false)
private FeignApi feignApi;
/*
* @ClassName FeignController
* @Desc TODO 通过 hystrix-b 服务名调用 b() 方法
* @Date 2019/5/20 23:13
* @Version 1.0
*/
@RequestMapping("/aUseB")
public String aUseB(){
return feignApi.b();
}
}
使用 @Autowired 注解装配 Bean,通过此 Bean 中的方法调用服务
此类对外暴露接口,调用的实则是提供者的服务
服务工程 A - 启动类
package com.zwc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class SpringcloudHystrixAServiceCoreApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudHystrixAServiceCoreApplication.class, args);
}
}无锡妇科医院 http://www.bhnnk120.com/
添加 @EnableEurekaClient 注解表示此工程可以向注册中心提供服务
添加 @EnableFeignClients 注解表示开启 Feign 功能进行远程调用
服务工程 A - 启动项目
1. 项目启动成功后访问:http://localhost:8090/a (调用自己的服务)
2. 输出内容:'Hello!I'm a. port:8090'
3. 刷新 http://localhost:8761/(注册中心)可以看到服务已经被注册进来了
4. 访问地址:http://localhost:8090/aUseB (调用 B 工程的服务)
5. 输出内容:'Hello!aUseB fail' (此时因为 B 工程还未启动,所以调用了 fallback 中的方法)
6. 启动服务工程 B,项目启动成功后再次访问:http://localhost:8090/aUseB (调用 B 工程的服务)
7. 输出内容:'Hello!I'm b. port:8091' (如果还未调用成功,等待一会再刷新试试)
8. 此时就证明熔断成功
9. 访问地址:http://localhost:8091/b (调用自己的服务)
10. 输出内容:'Hello!I'm b. port:8091'
11. 再次刷新 http://localhost:8761/(注册中心),发现 B 工程服务也注册进来了
service 工程 - 项目结构
把多工程项目使用 IntelliJ IDEA 打开
把项目从 GitHub 中下载到你的本地
打开 IntelliJ IDEA
点击 File -> Open
打开你下载到本地的项目目录
springcloud-hystrix -> springcloud-hystrix-service(选择打开此工程)
打开 service 工程后
再次点击 File -> Project Structrue
选择 Modules,点击 '+' 符号
点击 Import Module
还是打开你下载到本地的项目目录
springcloud-hystrix -> springcloud-hystrix-commons -> pom.xml
点击 OK
点击 Next,Finish
点击 Apply,OK
SpringCloud之熔断器Hystrix(二)相关推荐
- SpringCloud使用熔断器Hystrix
文章目录 1. 配置 1.1 远程调用配置 1.2 测试远程调用 1.3 使用熔断器Hystrix 1.4 测试熔断器 1. 配置 Feign是简化Java HTTP客户端开发的工具(java-to- ...
- SpringCloud 组件 熔断器Hystrix
Hystrix 的中文名字是"豪猪",豪猪是满身长满了刺,能够保护自己不受天敌的伤害,代表了一种防御机制,Hystrix 在 SpringCloud 中负责服务熔断和服务降级的作用 ...
- springcloud 熔断器Hystrix的具体使用
springcloud 熔断器Hystrix的具体使用 说起springcloud熔断让我想起了去年股市中的熔断,多次痛的领悟,随意实施的熔断对整个系统的影响是灾难性的,好了接下来我们还是说正事. 熔 ...
- SpringCloud组件之熔断器Hystrix的理论与实操
本篇博客主要讲解Hystrix的理论以及实现. 首先先来讲熔断器Hystrix的理论以及两种实现方法. 熔断器理论 为什么使用熔断器 分布式系统面临的问题:雪崩效应 在微服务架构中通常会有多个服务层调 ...
- [菜鸟SpringCloud实战入门]第五章:熔断器Hystrix的使用 + 可视化监控Hystrix Dashboard和Turbine
前言 欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud. 本系列适合有一定Java以及Sp ...
- 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)
在微服务项目中,一个系统可以分割成很多个不同的服务模块,不同模块之间我们通常需要进行相互调用.springcloud中可以使用RestTemplate+Ribbon和Feign来调用(工作中基本都是使 ...
- 《深入理解 Spring Cloud 与微服务构建》第九章 熔断器 Hystrix
<深入理解 Spring Cloud 与微服务构建>第九章 熔断器 Hystrix 文章目录 <深入理解 Spring Cloud 与微服务构建>第九章 熔断器 Hystrix ...
- 关于熔断器Hystrix替代方案的调研报告
关于熔断器Hystrix替代方案的调研报告 一.背景 Netflix宣布停止Hystrix熔断器的开发,目前进入了维护模式.同时,也指出了Hystrix 1.5.18版本足够满足现阶段的应用(详细请参 ...
- 第六章 服务熔断器Hystrix
6-1.Hystrix是什么? 在微服务的框架中,我们是将一个单体应用拆分成多个服务单元,各个服务单元之间通过注册中心彼此发现和消费对方提供的服务,每个服务器单元都是单独部署,在各自服务的运行 ...
- 熔断器hystrix的使用
一.restTemplate+ribbon使用hystrix 1.引入依赖 <dependency><groupId>org.springframework.cloud< ...
最新文章
- 相较神经网络,大名鼎鼎的傅里叶变换,为何没有一统函数逼近器?答案在这...
- java inputstream 回退_系统学习 Java IO (十)----回退流 PushbackInputStream
- 6. Qt 信号与信号槽(8)实例分析
- 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结
- 机器学习理论入门:第二章 经典监督学习算法-决策树
- iOS版微信6.3.19更新发朋友圈可选可见范围
- 10.11 安装pod
- hdu 3177贪心
- [下载]青岛交通旅游地图[download]
- php MySQLDB类
- 机器人学导论原书第三版
- 数据结构视频教程 严蔚敏
- 记一次爆破六位数密码(图书馆系统登录)
- MSVCR100.dll丢失
- jQuery 效果 - 淡入淡出,fadeIn,fadeOut,fadeToggle的使用
- UnityVR-初识Unity-实践-制作一个工程场景
- Deepin安装dotnet
- 群晖3617可以有几个网卡_Nvme pcie千兆有线网卡
- H3Cmsr830 l2tp二层隧道协议配置详解(host-R版)
- CANoe——CAPL(Message)
热门文章
- 基于Tiny6410的LCD与一线触屏移植
- 一种结构和纹理感知 Retinex 模型 (2020 TIP) (1 of 2)
- 回溯法——利用解空间树解决0-1背包问题
- 为什么人工智能难以达到儿童语言水平?
- 2018年上半年信息系统项目管理师考试真题附答案解析(1)
- P18利用5次shift漏洞破解win7密码
- 银河战舰服务器无响应,银河战舰帝国起源
- idea无法下载源码 Sources not found for: org.springframework:spring-context:5.1.5.RELEAS
- 铁路订票系统的简单设计(转)
- msg1500说明书_拆解电信定制 瑞斯达康MSG1500 双频路由器