Hystrix应用

2019-10-08  本文已影响0人  长孙俊明
###服务启动端口号
server:
   port: 8001
###服务名称(服务注册到eureka名称)
spring:
   application:
       name: test-configClient #如果配置了Config,该名称必须跟Git上的配置文件前缀一致。如:test-configClient-prd.properties
   cloud:
     config:
       # 读取版本环境,也就是配置文件的后缀名。如:test-configClient-prd.properties
       profile: prd
       discovery:
         # 就是读取configserver服务,写成configserver的spring.application.name
         service-id: config-server
         enabled: true
###服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8100/eureka
ribbon:
  ReadTimeout: 6000
  ConnectTimeout: 6000

# 禁止服务超时时间
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true

# feign开启hystrix配置
feign:
  hystrix:
    enabled: true
package com.springcloudtest.order.api.fallback;

import com.springcloudtest.order.api.service.MemberService;
import org.springframework.stereotype.Component;

@Component
public class DefaultMemberService implements MemberService {
    @Override
    public String getMember() {
        return "以类的方式,连接超时。";
    }

}
package com.springcloudtest.order.api.service;

import com.springcloudtest.order.api.fallback.DefaultMemberService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(name="app-member", fallback=DefaultMemberService.class)
public interface MemberService {
    @RequestMapping("/geteMember")
    public String getMember();
}

package com.springcloudtest.order.api;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.springcloudtest.order.api.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RefreshScope
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private MemberService memberService;

    // 读取ConfigServer服务上的值
    @Value("${dburl}")
    private String dburl;

    @RequestMapping("/getOrder")
    @HystrixCommand(fallbackMethod = "getErrorTip")
    public String getOrder() {
        System.out.println("orderToMemberUserInfoHystrix:" + "线程池名称:" + Thread.currentThread().getName());
       // return restTemplate.getForObject("http://APP-MEMBER/geteMember", String.class);
        return memberService.getMember();
    }

    // Hystrix以类方式提示超时
    @RequestMapping("/getOrderWithClass")
    public String getOrderWithClass() {
        System.out.println("getOrderWithClass:" + "线程池名称:" + Thread.currentThread().getName());
        // return restTemplate.getForObject("http://APP-MEMBER/geteMember", String.class);
        return memberService.getMember();
    }

    @RequestMapping("/getDburl")
    public String getDburl() {
        return dburl;
    }

    public String getErrorTip() {
        return "访问超时,请稍后重试。";
    }
}
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!-- actuator 监控中心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
上一篇下一篇

猜你喜欢

热点阅读