zoukankan      html  css  js  c++  java
  • Feign服务消费 + Hystrix熔断

    yls
    2020/5/5

    1.搭建服务注册中心

    2.创建服务提供者

    • 新建一个module,导入依赖包
            <!--服务注册与发现中心 start-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <!--服务注册与发现中心 end-->
    
    • 启动类添加注解 @EnableDiscoveryClient
    • 添加配置文件application.yml,将服务注册到eureka中
    spring:
      application:
        name: itoken-service-redis
    server:
      port: 8502
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    
    • 创建一个controller,以供消费者调用
    @RestController
    public class DemoController {
        @PostMapping(value = "/put")
        public String put(String value){
    
            return value+"ok";
        }
    }
    
    • 启动服务

    3.创建服务消费者

    • 新建module,导入依赖包
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
    <!--熔断器 start   由于feign自带,所有不需要添加
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
            熔断器 end-->
            <!--服务消费者 feign   start-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <!--服务消费者  feign  end-->
    
    • 启动类添加注解,如下所示
    @EnableDiscoveryClient
    @EnableFeignClients
    @SpringBootApplication
    public class ItokenWebadminApplication {
        public static void main(String[] args) {
            SpringApplication.run(ItokenWebadminApplication.class, args);
        }
    }
    
    • 添加配置文件application.yml
    spring:
      application:
        name: itoken-web-admin
    
    #开启熔断器
    feign:
      hystrix:
        enabled: true
    
    server:
      port: 8601
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    
    • 创建service用于消费服务提供者的服务
    //itoken-service-redis是服务提供者的服务名称
    //fallback = RedisServiceFallBack.class是熔断操作类
    @FeignClient(value = "itoken-service-redis",fallback = RedisServiceFallBack.class)
    public interface DemoService {
        @PostMapping(value = "/put")
        public String put(@RequestParam(value = "value") String value);
    }
    
    • 熔断操作类
    @Component
    public class RedisServiceFallBack implements DemoService {
        @Override
        public String put(String value) {
            return FallBack.badGateWay();//统一管理熔断信息
        }
    }
    
    /**
     * 统一管理熔断信息
     */
    public class FallBack {
        public static String badGateWay(){
            try {
                return JsonUtil.objectToString(ResultUtil.error(502,"内部错误"));
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    • 创建controller调用service
    @RestController
    public class UserController {
        @Autowired
        private DemoService demoService;
    
        @RequestMapping(value = {"/index"})
        public String index(){
            String json = demoService.put("hello ");
            System.out.println(json);
            return json;
        }
    }
    
    • 浏览器访问http://localhost:8601/index,将会返回 hello ok,表示服务消费成功。
  • 相关阅读:
    An internal error occured during :"C/C++" . java.lang.NullPointerException
    链接目标文件提示对象重定义解决方法
    cocos2d Slider 透明滑动部件无法生成解决办法
    cocos2d 艺术标签没有显示
    cocos2d项目 打包apk 项目名称相关设置
    cocos2d-x 3.2 listview scorllview 等容器在小米华为等部分手机显示泛白解决
    Linux发行版的系统目录名称命名规则以及用途
    Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符
    在vim中设置tab缩进为4个字符
  • 原文地址:https://www.cnblogs.com/yloved/p/12833037.html
Copyright © 2011-2022 走看看