0041-Ribbon使用Hystrix

1. pom依赖

 <dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
</dependencies>

2. yml配置

server:
  port: 9001

eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka-server-7001:7001/eureka/,http://eureka-server-7002:7002/eureka/,http://eureka-server-7003:7003/eureka/
#      defaultZone: http://eureka-server-8001:8001/eureka/
  instance:
    instance-id: eureka-provider-9001 # 服务名称
    prefer-ip-address: true # 显示ip地址

info: # 点击注册列表未服务出现的信息
  app.name: springcloud
  company.name: www.honor.com
  build.artifactId: @project.artifactId@
  build.version: @project.version@

spring:
  application:
    name: eureka-consumer-ribbon

3. RestTemplate配置

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

4. 服务调用

@RestController
public class HelloController {
    @Autowired
    private RestTemplate restTemplate;
    // 服务提供方
    private final static String HELLO_SERVICE_NAME = "http://eureka-provider/";

    @RequestMapping("/hello/{name}")
    // 当微服务无法调用成功的是,就会调用sayHelloError方法
    @HystrixCommand(fallbackMethod = "sayHelloError")
    public String sayHello(@PathVariable("name") String name) {
        return restTemplate.getForObject(HELLO_SERVICE_NAME + "hello/" + name, String.class);
    }

    private String sayHelloError(String name) {
        return "hello " + name + ", current service exception. Please try again later";
    }
}

5. 主启动类

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

6. 测试

当服务提供者8001、8002、8003都正常时跟平时调用一样没有区别,关闭8003模拟服务故障,你会发现当轮询到8003时,会返回fallbackMethod指定方法中的内容,当重试多次以后没有用,服务调用者就不会访问8003了,等一段时间后,又会尝试访问8003,如果还是不行就又熔断,如果访问成功了,那就恢复正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值