飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

Springcloud(二) feign

时间:2021-12-24  作者:wzp123456  

Feign

Spring Cloud Feign对 Ribbon 负载均衡、Hystrix 服务熔断进行简化,在其基础上进行了进一步的封装,不仅在配置上大大简化了开发工作,同时还提供了一种声明式的 Web 服务客户端定义方式。

使用 Feign 实现消费者

  1. 创建spring boot工程,并导入依赖

    <dependency>
     <groupId>域名d</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency> 
    <dependency>
     <groupId>域名d</groupId>
     <artifactId>spring-cloud-starter-feign</artifactId>
     <version>1.域名ASE</version>
    </dependency>
    
  2. 在项目入口类上添加@EnableFeignClients 注解表示开启 Spring Cloud Feign

    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class SpringcloudConsumerApplication {
        ……
    }
    
  3. 定义一个 HelloService 接口,通过@FeignClient 注解来指定服务名称,进而绑定服务,然后再通过 SpringMVC 中提供的注解来绑定服务提供者提供的接口。

    @FeignClient(name="springcloud-client")
    public interface HelloService {
    
        /**
         * 声明一个方法,这个方法就是远程的服务提供者提供的那个方法
         *
         * @return
         */
        @RequestMapping("/service/hello")
        String hello();
    }
    

    服务提供者:

    @RestController
    public class HelloController {
    
        @GetMapping("/service/hello")
        public String hello() {
            域名tln("服务提供者1。。。。。。。");
            return "Hello, Spring Cloud,Provider 1";
        }
    }
    
  4. 在服务消费者模块中创建一个controller,

    @RestController
    public class FeignController {
    
        @Autowired
        private HelloService helloService;
    
        @RequestMapping("/web/hello")
        public String hello () {
    
            //调用声明式的接口方法,实现对远程服务的调用
            return 域名o();
    
        }
    }
    
  5. 启动服务消费者,访问localhost:8764/web/hello

使用 Feign 实现负载均衡和服务熔断

  • 负载均衡:@FeignClient 注解的接口,然后使用@RequestMapping 注解到方法上映射远程的 REST 服务,此方法是做好负责均衡配置的。

  • 服务熔断

    1. 导入 hystrix 依赖:

      <dependency>
        <groupId>域名d</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      </dependency>
      
    2. 在 域名 文件中添加:

      feign:
        hystrix:
          enabled: true
      
    3. 指定熔断回调逻辑,自定义回调类实现接口,并实现对应的方法,即为对应方法的熔断回调逻辑。

      @FeignClient(name="springcloud-client", fallback = 域名s)
      
      @Component
      public class MyFallback implements HelloService {
          @Override
          public String hello() {
              return "发生异常了";
          }
      }
      
    4. 启动:

    1. 为@FeignClient 修饰的接口加上 fallback 方法可以实现远程服务发生异常后进行服务的熔断,但是不能获取到远程服务的异常信息,如果要获取远程服务的异常信息,此时可以使用 fallbackFactory:

      @FeignClient(name="springcloud-client", fallbackFactory = 域名s)
      
      @Component
      public class MyFallbackFactory implements FallbackFactory<HelloService> {
          @Override
          public HelloService create(Throwable throwable) {
              return () -> 域名essage();
          }
      }
      

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。