Eureka客户端-服务消费者(Ribbon+Hystrix)

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端点,那么两个端点将不能被访问。

猜你喜欢

转载自blog.csdn.net/weixin_42152604/article/details/85120337