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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 成员变量,类变量,局部变量的区别是什么_内部变量和局部变量

    成员变量,类变量,局部变量的区别是什么_内部变量和局部变量面向对象编程1.封装性面向对象编程核心思想之一就是将数据和对数据的操作封装在一起,通过抽象即从具体的实例中抽取共同的性质形成一般的概念。2.继承子类可以继承父类的属性和功能,即子类继承了父类所有的数据和数据上的操作,同时又可以添加子类独有的数据和数据上的操作。3.多态有两种意义的多态    1)操作名称的多态  2)和继承有关的多态类:

    2025年7月26日
    4
  • 微网站 源码 php,php 微网站 实例源码(pc手机平板 均可浏览)

    微网站 源码 php,php 微网站 实例源码(pc手机平板 均可浏览)【实例简介】【实例截图】【核心代码】classAdminActionextendsCommAction{publicfunction_initialize(){if(session(‘adminuser’)!=C(‘webuser’)){$this->error(‘你没有权限’,U(‘/Admin/Index/home’));}}publicfunctionindex(){i…

    2022年4月19日
    64
  • 股票预测 lstm(时间序列的预测步骤)

    LSTM数据集实战如果对LSTM原理不懂得小伙伴可以看博主下一篇博客,因为博主水平有限,结合其他文章尽量把原理写的清楚些。数据集首先附上数据集链接:https://pan.baidu.com/s/1AKsz-ohmYHr9mBEEh76P5g提取码:6owv这个数据集是关于股票的,里面有日期,开盘价等信息。既然是时间序列预测,我们最关心的是预测值在时间维度上的走势如何,那我们只要最后一列volume和第一列date这两列就好了。实战先是导入相关包,一些常见的包就不详细说了,我们需要的Se

    2022年4月17日
    58
  • PHP中生成json信息的方法

    PHP中生成json信息的方法

    2022年2月21日
    47
  • 就业更看重本科学历还是研究生学历(大厂面试的员工什么水平)

    前言我是一个普通本科出身的Android程序员,我的学校也不过就是一个普通二本。嗯,我的学弟学妹们也是一样的,都是普通二本。但是和我不同的是,现在的社会越来越浮躁了,浮躁的让人沉不下心认真做事,让人忍不住去想各种有的没的。比如我的这些学弟学妹们。我已经不止一次收到来自他们的私信了,他们问的内容,无一不是表达对自己学历的自卑和对即将离开学校的自己的不自信,还有对面试被拒的伤心。千篇一律的问题,基本内容如下:面试挂了,大厂面试到底更看重学历还是技术?我这样的学历在求职中有什么需要注意点的点吗?

    2022年4月11日
    85
  • html如何打印_html打印代码

    html如何打印_html打印代码利用JS技术实现打印HTML表格 通常在浏览网页的时候,网页上总是出现一些和内容无关的内容,在打印的时候,要是把整个网页都打印下来,总会有些不方便。。。所以在有需要打印的网页上稍微设置一下打印页是很有必要的。。。 首先在head里面加入下面一段js代码:———————————————functionprev

    2022年8月11日
    45

发表回复

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

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