美文网首页Java
springcloud之feign+hystrix

springcloud之feign+hystrix

作者: GG_lyf | 来源:发表于2021-01-06 10:06 被阅读0次

前言

  当一个接口在别的微服务的时候,刚好你想用这个端口,怎么办?是不是要将想要的微服务的依赖给放到这个要调用的微服中?这是不是有点麻烦了?所以,feign刚好可以解决这个问题


开搞

  Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

  在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

  Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

  Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。

  Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

  Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。

1.在现有的springboot项目中创建一个feign微服务,并且用的是maven创建的

2.添加依赖

<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-openfeign</artifactId>
</dependency>

3.修改application.yml

eureka:
  instance:
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: http://127.0.0.1:9000/eureka/
feign:
  hystrix:
    enabled: true

4.修改启动类

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"org.lyf.feign.client"})  //想要远程访问的接口的类属包名
@EnableDiscoveryClient
public class FeignApplication {
  public static void main(String[] args) {
    SpringApplication.run(FeignApplication.class);
  }
}

5.org.lyf.feign.client接口包中添加UserClient

@FeignClient(value = "user", fallback = UserClientImpl.class)//微服务名和熔断器类
public interface UserClient {

  @GetMapping("/user/findAll") //把接口名写全
  Result findAll();
}

6.同级目录下写熔断器

@Component
public class UserClientImpl implements UserClient {
  @Override
  public Result findAll() {
    return new Result(false, StatusCode.ERROR,"远程调用出现了问题,触发了熔断器");
  }
}

7.写控制类

@RestController
@RequestMapping("/feign")
public class UserFeign {

  private static final Logger LOG = LoggerFactory.getLogger(UserFeign.class);

  @Resource
  private UserClient userClient;

  @GetMapping("/findAll")
  public Result findAll() {
    LOG.info("/feign/findAll");
    return userClient.findAll();
  }
}

8.访问localhost:9002/feign/findAll

相关文章

网友评论

    本文标题:springcloud之feign+hystrix

    本文链接:https://www.haomeiwen.com/subject/oieboktx.html