栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud之Hystrix

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud之Hystrix

Hystrix是一种保护机制,即熔断器。 服务的消费者请求服务担心返回异常,所以需要在消费者一方配置自己的降级处理,所以操作在消费者一方。

1、引入Hystix依赖

    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix
2、开启服务降级
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class ConsumerApp {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args){
        SpringApplication.run(ConsumerApp.class,args);
    }
}
3、重新写方法 因为默认使用了Hystrix,所以要处理一下方法,如果失败之后返回信息
     
    @GetMapping("/student/{ids}")
    @HystrixCommand(fallbackMethod = "studentsFallBack")
    public List student(@PathVariable("ids") List ids){
        List list = new ArrayList<>();
        ids.forEach(id->{
            //远程调用,更改路径(需要开启负载均衡)
            String url = "http://user-service/student/"+id;
            Student student = restTemplate.getForObject(url, Student.class);
            list.add(student);
        });
        return list;
    }

    
    public List studentsFallBack(@PathVariable("ids") List ids){
        List list = new ArrayList<>();
        for(Integer id : ids){
            Student student = new Student();
            student.setName("请求超时!");
            list.add(student);
        }
        return list;
    }
4、改造user-service 为了能够模拟超时,需要改造一下user-service,让其返回结果慢一点返回
    
    @GetMapping("/student/{id}")
    public Student student(@PathVariable("id") int id){
        try {
            Thread.sleep(2000L);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        return studentService.getById(id);
    }
5、同步更新配置文件 性能都改为单台服务进行测试

eureka-server:

server:
  port: 10086
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/
spring:
  application:
    name: eureka-server

user-service:

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/
    instance:
      instance-id: ${spring.application.name}:${server.port}

consumer-demo:

server:
  port: 9000
spring:
  application:
    name: consumer-demo
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号