Feign 与 Hystrix 结合的使用

lili_lu 发表于 2021/01/22 21:52:57 2021/01/22
【摘要】 Feign与Hystrix使用Feign需要添加相关依赖,在上一篇的基础上添加以下依赖:<dependency>// openfegin的相关依赖  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>Feign是自带...

Feign与Hystrix

使用Feign需要添加相关依赖,在上一篇的基础上添加以下依赖:

<dependency>// openfegin的相关依赖
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

Feign是自带Hystrix,但是默认没有打开,在application.yml中添加以下配置:

feign:
  hystrix:
    enabled: true

开启Fegin,添加@EnableFeignClients注解。

@SpringBootApplication
@EnableCircuitBreaker
@EnableFeignClients
@EnableDiscoveryClient
public class Chapter6HystrixApplication {

 public static void main(String[] args) {
  SpringApplication.run(Chapter6HystrixApplication.classargs);
 }


 @Bean
 @LoadBalanced
 RestTemplate restTemplate(){
  return new RestTemplate();
 }

}

添加FeginClient接口,调用feign-service服务,同时指定失败回滚类为InstanceClientFallBack

@FeignClient(value = "feign-service", fallback = InstanceClientFallBack.class)
public interface InstanceClient 
{

    @RequestMapping(value = "/feign-service/instance/{serviceId}", method = RequestMethod.GET)
    public Instance getInstanceByServiceId(@PathVariable("serviceId") String serviceId);
}

继承InstanceClient,提供相关的回滚方法。

@Component
public class InstanceClientFallBack implements InstanceClient {

    private static Logger logger = LoggerFactory.getLogger(InstanceClientFallBack.class);

    @Override
    public Instance getInstanceByServiceId(String serviceId) {
        logger.info("Can not get Instance by serviceId {}", serviceId);
        return new Instance("error""error"0);
    }
}

InstanceService添加相关的服务:


@Autowired
InstanceClient instanceClient;

public Instance getInstanceByServiceIdWithFeign(String serviceId){
 Instance instance = instanceClient.getInstanceByServiceId(serviceId);
 return instance;
}

InstanceController中添加相关的查看接口:


@RequestMapping(value = "feign/{serviceId}", method = RequestMethod.GET)
public Instance getInstanceByServiceIdWithFeign(@PathVariable("serviceId") String serviceId){
 logger.info("Get Instance by serviceId {}", serviceId);
 return instanceService.getInstanceByServiceIdWithFeign(serviceId);
}

依次启动eureka-serverfeign-service以及本服务。

访问http://localhost:8876/instance/feign/my-application接口。

{"serviceId":"my-application","host":"localhost","port":8080}

访问成功执行,返回预期的结果。

关闭feign-service,再次访问http://localhost:8876/instance/feign/my-application接口。

{"serviceId":"error","host":"error","port":0}

这说明Feign中的失败回滚发挥了作用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。