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,如果还是不行就又熔断,如果访问成功了,那就恢复正常。
351

被折叠的 条评论
为什么被折叠?



