SpringCloud—-解决灾难性雪崩效应的方法之降级

SpringCloud—-解决灾难性雪崩效应的方法之降级

一.前言

解决服务雪崩效应,都是避免application client请求application service时,出现服务调用错误或网络问题。处理手法都是在application client中实现。我们需要在application client相关工程中导入hystrix依赖信息。并在对应的启动类上增加新的注解@EnableCircuitBreaker,这个注解是用于开启hystrix熔断器的,简言之,就是让代码中的hystrix相关注解生效。

二.代码实现

1.新建ApplicationServiceDemo

1.1.配置pom.xml

需要web和eureka-client

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR9</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

1.2新建配置文件

spring:
  application:
    name: application-service-demo
eureka:
  client:
    service-url:
      defaultZone: http://eurekaserver1:8761/eureka/

1.3新建控制器

@Controller
public class DemoController {
   
    @RequestMapping("/demo")
    @ResponseBody
    public String demo(){
   
        return "demo-service";
    }
}

1.4新建启动类

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

2.新建DemoFallback

新建项目DemoFallback作为Application Client

2.1编写pom.xml

需要配置web,eureka-client,netflix-hystrix

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR9</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
</dependencies>

2.2新建配置文件

spring:
  application:
    name: fallback-demo
eureka:
  client:
    service-url:
      defaultZone: http://eurekaserver1:8761/eureka/


server:
  port: 8081

2.3新建配置类

@Configuration
public class RibbonConfig {
   
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
   
        return new RestTemplate();
    }
}

2.4新建service及实现类

public interface DemoService {
   
    String test();
}
@Service
public class DemoServiceImpl implements DemoService {
   
    @Autowired
    private RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "myFallback")
    @Override
    public String test() {
   
        String result = restTemplate.postForObject("http://application-service-demo/demo", null, String.class);
        System.out.println(result);
        return result;
    }

    public String myFallback(){
   
        return "托底数据";
    }
}

2.5新建控制器

@Controller
public class FallbackController {
   

    @Autowired
    private DemoService demoService;

    @RequestMapping("/demo")
    @ResponseBody
    public String demo(){
   
        return demoService.test();
    }
}

2.6新建启动类

@SpringBootApplication
@EnableCircuitBreaker
public class ApplicationClientApplication {
   

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

}

2.7访问

在浏览器输入http://localhost:8081/demo

3.测试降级

停止ApplicationServiceDemo项目。再次访问
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2314.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 操作系统之——银行家算法C语言实现

    操作系统之——银行家算法C语言实现//银行家算法.cpp:定义控制台应用程序的入口点。//#include”stdafx.h”#include”string.h”#include”stdlib.h”#defineMAX_PROCESS10//进程数上限#defineMAX_RESOURCE_KIND10//资源种类上限#defineMAX_RESOURCE_NUM20 //每种资源可用

    2022年6月2日
    35
  • Apache规则RewriteCond详解

    Apache规则RewriteCond详解
    Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。
      RewriteEngineon
      RewriteCond %{HTTP_USER_AGENT

    2022年6月12日
    30
  • 查看linux操作系统版本

    查看linux操作系统版本

    2021年7月18日
    68
  • SqlCommand.ExecuteReader 方法

    SqlCommand.ExecuteReader 方法SqlCommand.ExecuteReader方法将CommandText发送到Connection并生成一个SqlDataReader。重载列表名称说明SqlCommand.ExecuteReader()…

    2022年6月20日
    28
  • 树莓派命令连接wifi_树莓派如何连接WIFI

    树莓派命令连接wifi_树莓派如何连接WIFIhello,大家好,我是叶秋!上一期呢,给大家介绍了如何给树莓派安装系统,有细心的朋友就会发现上一期安装系统的文章漏了一点点知识,不知道机智的你是否有发现呢~~(尴尬????)下次一定注意。。????在第五步使用putty连接树莓派的时候,是使用的ssh连接的,所以呢树莓派一定要开启ssh,树莓派开启ssh也很简单,就是写完系统以后,直接在根目录新建一个文件,改名ssh然后删掉后缀名就OK啦,记住一…

    2022年6月11日
    39
  • Docker 上安装、启动 MySQL (图解)「建议收藏」

    Docker 上安装、启动 MySQL (图解)「建议收藏」1.在docker仓库中搜索mysql的镜像:dockersearchmysql下载镜像:dockerpullmysql2.查看本地镜像:dockerimages-aa.参数-a表示所有b.启动mysql容器,并进入shell命令交互界面:dockerrun-itmy…

    2022年10月4日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号