Eureka客戶端-服務消費者(Ribbon+Hystrix)
阿新 • • 發佈:2019-01-14
1、pom.xml
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--restTemplate要用到--> </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-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <!--客戶端只有當我們有了這個依賴之後,才能有那些狀態頁面的檢視,否則會報ErrorPage--> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> </dependencies>
2、application.yml
spring:
application:
name: eureka-client-consumer-ribbon-hystrix
server:
port: 8604
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8761/eureka/
3、簡單的Ribbon的使用
(1)服務提供者
@RequestMapping("/getUUid/{i}") public String getUUid(@PathVariable("i") Integer i){ UUID uuid = UUID.randomUUID(); String s = i + "==="+uuid.toString(); return s; }
(2)服務消費者
@RestController public class ConsumerController { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "getUUidFallback") @RequestMapping("/getUUid/{i}") public String getUUid(@PathVariable Integer i){ return restTemplate.getForObject("http://eureka-client-provider/getUUid/"+i,String.class); } public String getUUidFallback(Integer i){ //引數和返回值必須和原方法一致,否則再呼叫的時候會報錯 return "getUUidFallback使用了"; } }
(3)服務消費者啟動類
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class EurekaconsumerribbonhystrixApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaconsumerribbonhystrixApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
4、關於Hystrix中傳播安全上下文這部分
@HystrixCommand(fallbackMethod = "getUUidFallback",commandProperties = {@HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")})
@RequestMapping("/getUUid/{i}")
public String getUUid(@PathVariable Integer i){
return restTemplate.getForObject("http://eureka-client-provider/getUUid/"+i,String.class);
}
大概應該是:
semaphore模式表示的是,我們的getUUid方法和getUUidFallback方法是在同一個執行緒裡面,
thread模式表示的是,兩個方法再不同的執行緒裡面,預設的是thread模式
5、健康指標
Finchley.SR1版本就我目前掌握的,/health端點下面只有
看視訊查部落格大部分都是Brixton版本的,暫且將這種現象理解成版本不一致的正常現象吧。
6、Hystrix指標流
和Brixton版本不同的是,我們不僅要加入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<!--客戶端只有當我們有了這個依賴之後,才能有那些狀態頁面的檢視,否則會報ErrorPage-->
</dependency>
這個依賴健康指標檢視的時候也要加。
還要加入配置:
management:
endpoints:
web:
exposure:
include: hystrix.stream,health,info
include:中的端點值用逗號分隔開來
注意,預設情況下我們只能訪問health和info端點的,如果我們加了這個配置,將會覆蓋掉預設的配置,也就是說如果我們再這個配置裡面不加入health和info端點,那麼兩個端點將不能被訪問。