springcloud04:Feign使用接口方式调用服务以及Hystrix服务熔断

news2024/11/26 22:26:39

Feign使用接口方式调用服务以及Hystrix服务熔断

  • Feign负载均衡
    • 客户端集成Feign
  • Hystrix
    • Hystrix定义
    • 服务熔断
    • 服务端集成Hystrix(springcloud-provider-dept-hystrix)实现服务熔断
    • 客户端集成Hystrix实现服务降级
    • 服务监控

Feign负载均衡

简介
在这里插入图片描述
在这里插入图片描述

客户端集成Feign

  • pom文件
  <!--Feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
  • DeptClientService调用文件
    在这里插入图片描述
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
public interface DeptClientService {

    @GetMapping("/dept/{deptNo}")
    Dept queryByDeptNo(@PathVariable("deptNo") Long deptNo);

    @GetMapping("/dept/queryAll")
    List<Dept> queryAll();

    @PostMapping("/dept/add")
    boolean addDept(@RequestBody Dept dept);
}
  • 客户端调用
    在这里插入图片描述
@RestController
public class FeignController {

    @Autowired
    private DeptClientService clientService;

    @GetMapping("/consumer/dept/{deptNo}")
    public Dept get(@PathVariable("deptNo") Long deptNo){
        return clientService.queryByDeptNo(deptNo);
    }

    @GetMapping("/consumer/list")
    public List<Dept> queryAll(){
        return clientService.queryAll();
    }

    @PostMapping("/consumer/dept/add")
    public boolean add(@RequestBody Dept dept){
        return clientService.addDept(dept);
    }
}
  • 客户端启动类
    添加注解:@EnableFeignClients(basePackages = {"com.service"})
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.service"})
public class FeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class,args);
    }
}

Hystrix

分布式系统面临的问题

复杂分布式体系结构中的应用程序十分依赖关系,每个依赖关系在某些时候将不可避免的失败!

服务雪崩
在这里插入图片描述

Hystrix定义

服务熔断

在这里插入图片描述

服务端集成Hystrix(springcloud-provider-dept-hystrix)实现服务熔断

  • pom.xml
 <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.dataformat</groupId>
                    <artifactId>jackson-dataformat-xml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.5</version>
        </dependency>
    </dependencies>
  • yml文件
server:
  port: 8002
#mybatis配置
mybatis:
  type-aliases-package: com.api.model
  mapper-locations: classpath:mybatis/mapper/*.xml
  config-location: classpath:mybatis/mybatis-config.xml
#spring配置
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/iwmstest?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456

#Eureka配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    instance-id: springcloud-server-provider-hystrix-8002 #修改Eureka的默认描述信息

#info配置
info:
  app.name: zzq-springcloud
  company.name: blog.com
  • controller配置
    加注解:@HystrixCommand(fallbackMethod = "hystrixGet")
@RestController
public class DeptHystrixController {

    @Autowired
    private DeptHystrixService deptService;

    @HystrixCommand(fallbackMethod = "hystrixGet")
    @GetMapping("/dept/{deptNo}")
    public Dept get(@PathVariable("deptNo") Long deptNo){
        Dept dept = deptService.queryById(deptNo);
        if (dept == null) {
            throw new RuntimeException("不存在该用户");
        }
        return dept;
    }

    //备选方法
    public Dept hystrixGet(Long deptNo){
        return new Dept()
                .setDeptNo(deptNo)
                .setDName("没有用户")
                .setDbSource("no database");
    }
}
  • 启动类开启熔断机制
    @EnableCircuitBreaker //启动服务熔断
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker //启动服务熔断
public class HystrixApplicaiton {
    public static void main(String[] args) {
        SpringApplication.run(HystrixApplicaiton.class,args);
    }
}

客户端集成Hystrix实现服务降级

  • DeptClientServiceFailBackFactory.java
    在这里插入图片描述
@Component
public class DeptClientServiceFailBackFactory implements FallbackFactory<DeptClientService> {
    @Override
    public DeptClientService create(Throwable throwable) {
        return new DeptClientService() {
            @Override
            public Dept queryByDeptNo(Long deptNo) {
                return new Dept().setDeptNo(deptNo)
                        .setDName("没有对应的信息")
                        .setDbSource("no database")
                        ;
            }
            @Override
            public List<Dept> queryAll() {
                return null;
            }

            @Override
            public boolean addDept(Dept dept) {
                return false;
            }
        };
    }
}
  • DeptClientService.java
    添加:fallbackFactory = DeptClientServiceFailBackFactory.class
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFailBackFactory.class)
public interface DeptClientService {

    @GetMapping("/dept/{deptNo}")
    Dept queryByDeptNo(@PathVariable("deptNo") Long deptNo);

    @GetMapping("/dept/queryAll")
    List<Dept> queryAll();

    @PostMapping("/dept/add")
    boolean addDept(@RequestBody Dept dept);
}

客户端配置文件开启服务降级
开启服务降级 feign: hystrix: enabled: true
在这里插入图片描述

server:
  port: 8081


#Eureka配置
eureka:
  client:
    register-with-eureka: false #不向Eureka注册自己
    service-url:
      defaultZone: http://localhost:8761/eureka/ #客户端注册进Eureka

# 开启服务降级
feign:
  hystrix:
    enabled: true

服务熔断和服务降级总结
在这里插入图片描述

服务监控

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

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

相关文章

golang编译tag学习

官方资料 官方解释&#xff1a; https://pkg.go.dev/cmd/go#hdr-Build_constraints ,go help buildconstraint 也能看到描述 根据官方描述&#xff0c;go1.16开始建议使用go:build方式&#xff0c;与build相比更容易被人阅读。 有关go:build注释的解析&#xff1a; src/go/buil…

[附源码]Node.js计算机毕业设计道岔故障监测系统设计Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

CSS -- 05. CSS定位方式总结

文章目录CSS定位1 定位1.1 为什么需要定位1.2 定位组成1.3 静态定位 static&#xff08;了解&#xff09;1.4 相对定位 relative&#xff08;重要&#xff09;1.5 绝对定位 absolute&#xff08;重要&#xff09;1.6 子绝父相1.7 固定定位 fixed&#xff08;重要&#xff09;1.…

SpringMVC(三) 获取请求参数(干货、超详细)

1.环境搭建 见SpringMVC(一) 2.获取参数 2.1使用Servlet API获取请求参数 将HttpServletRequest作为控制器方法的形参&#xff0c;DispatcherServlet发现控制器方法有HttpServletRequest形参&#xff0c;就把参数给传进来&#xff0c;HttpServletRequest就是javaWeb中的Htt…

[附源码]计算机毕业设计房屋租赁信息系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

Python文件操作详解(一)

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python文件操作详解。 一、Python文件处理简介 使用Python可以编写程序处理文件&#xff0c;Python可以处理的文件值得是任何存储在辅助存储器上的数据序列。 在Python中&#xff0c;对于文件的处理通常由一定的流…

Code::Blocks(V20.03)工具安装、汉化、使用一条龙介绍

文章目录1、猿如意介绍2、Code::Blocks简介3、Code::Blocks安装3.1 下载3.2 安装3.3 汉化&#xff08;可选项&#xff09;4、Code::Blocks使用4.1 基本界面一览4.2 单个小工程5、Code::Blocks使用感受1、猿如意介绍 猿如意官网客户端下载地址 正如官网页面介绍猿如意的功能和作…

Allegro如何创建Group操作指导

Allegro如何创建Group操作指导 Allegro支持把器件,过孔和走线等等做成一个Group,对于PCB设计也很大帮助,如何创建一个group,具体操作如下 以下面图片为例 选择edit-groups Options选项里输出任意一个Group的名字 之后会出现一个Create Group弹窗,选择是 之后find选择…

年终将近,如何快速处理销售数据分析

编者按&#xff1a;如何做好企业销售数据分析&#xff0c;基于低代码平台实现的智能销售系统&#xff0c;以四大数据引擎为支撑&#xff0c;助力企业数据管理。 关键词&#xff1a;低代码平台&#xff0c;企业域管理&#xff0c;数据视图&#xff0c;智能报表&#xff0c;数据…

FFmpeg音视频编解码详解

本文你可以了解到 如何在 NDK 层调用 OpenGL ES &#xff0c;以及使用 OpenGL ES 来渲染 FFmpeg 解码出来的视频数据。 一、渲染流程介绍 在 Java 层&#xff0c;Android 已经为我们提供了 GLSurfaceView 用于 OpenGL ES 的渲染&#xff0c;我们不必关心 OpenGL ES 中关于 EGL…

开发游戏相关业务该如何选择云服务器及相关产品?

游戏开发分为两种&#xff0c;第一种就是角色扮演类&#xff0c;另一种就是休闲类游戏&#xff0c;角色扮演类游戏对于计算能力以及游戏安全有很大的尤其&#xff1b;而休闲类游戏对于资源、运维、成本控制有所要求&#xff0c;下面就给大家展示一下腾讯云官方给出的解决方案&a…

如何去做一个完整的网站 SEO 优化方案?

想要做好网站优化&#xff0c;就必须制定一套适合自己的网站优化方案。优化只是一个过程&#xff0c;更多的是简单工作的重复&#xff0c;但也有技巧和方法。这个时候&#xff0c;你的网站优化方案就显得尤为重要。为您指明今后优化工作的途径&#xff0c;您在上一篇文章《传:东…

网络小白入门之路之以太网链路聚合 ---尚文网络奎哥

随着业务的发展和园区网络规模的不断扩大&#xff0c;用户对于网络的带宽、可靠性要求越来越高。传统解决方案通过升级设备方式提高网络带宽&#xff0c;同时通过部署冗余链路并辅以STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09;协议实现高可靠。传…

使用Idea中Docker插件部署并远程Debug

目前在java开发中&#xff0c;由于一套完整的项目所涉及到的微服务模块很多&#xff0c;要是按照传统的方式一个一个部署比较麻烦&#xff0c;所以很多情况下我们都会使用docker镜像的方式进行部署。当我们的应用部署好之后&#xff0c;若运行过程中出现问题&#xff0c;我们也…

docker搭建服务监控 prometheus+node_export+grafana

文章目录下载镜像node-exporter 收集数据prometheus监控搭建grafana数据可视化下载镜像 docker pull grafana/grafana docker pull prom/node-exporter docker pull prom/prometheus链接&#xff1a;点击 提取码&#xff1a;yyds node-exporter 收集数据 docker run -d -p 9…

Android:为了突破瓶颈,你总得新学点什么吧?

一眨眼就到了12月份了&#xff0c;在这拥有“35岁魔咒”IT场上工作多年的你&#xff0c;是否遇到了发展瓶颈&#xff1f;想突破瓶颈有时需要一个机遇&#xff0c;但这个合适的机会很难遇到。这时候&#xff0c;或许你可以思考&#xff0c;自己是否还有改变的空间&#xff1f;如…

不会开赛车的管理者不是好的开发人

今天要讲述的人物&#xff0c;身上的标签比较多元。 他是微软 RD&#xff08; Regional Director &#xff09;兼微软 MVP&#xff1b;在制造业领域深耕十多年&#xff0c;擅长在不同的角色用不同观点看待软件开发流程&#xff0c;热爱探索商业需求和解决方案之间的平衡&#…

目标检测中的不均衡问题综述

导推荐的&#xff0c;简单看了一下&#xff0c;&#xff08;太菜&#xff0c;太多不懂&#xff0c;希望以后会懂&#xff0c;简单做个记录 其实做的是xmind&#xff0c;但是想放到csdn上只能导出成md了。 Imbalance Problems in Object Detection: A Review 类别不平衡 简单…

01GO入门

GO入门一、hello&#xff0c;world二、运行一、hello&#xff0c;world 对上图的说明 1.go文件的后缀是.go 2.package main ​ 表示该hello.go 文件所在的包是main&#xff0c;在go中每个文件都必须归属于一个包。 3.import“fmt” ​ 表示&#xff1a;引入一个包&#xf…

【Docker】Docker镜像是什么?浅谈对Docker镜像的理解

专栏往期文章 《Docker是什么&#xff1f;Docker从介绍到Linux安装图文详细教程》《30条Docker常用命令图文举例总结》 本期目录专栏往期文章1. Docker镜像介绍2. UnionFS介绍3. Docker镜像加载原理4. 为什么Docker镜像要采用分层结构5. 镜像只读, 容器可写1. Docker镜像介绍 …