一、概述
Feign 是一个声明式的伪 HTTP 客户端,它使得写 HTTP 客户端变得更简单。使用 Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用 Feign 注解和 JAX-RS 注解。Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,Nacos 也很好的兼容了 Feign,默认实现了负载均衡的效果。
二、使用步骤
- 添加依赖;
- 启动类启用Feign;
- 编写远程调用接口;
- 使用接口,完成服务调用
三、案例演示
本案例是在上一篇文章《二、Spring Cloud Alibaba-Nacos-服务注册与发现》的基础上进行改造的。
在上一篇文章的服务消费者(nacos-consumer)
模块中,是使用RestTemplate来调用服务提供者,在实际开发中并不会这么做,此案例就使用Feign来实现服务调用。
注:以下代码改造均为服务消费者(nacos-consumer)
模块!!!
3.1、Maven依赖(POM)
在服务消费者(nacos-consumer)
模块中添加Feign依赖:
<!-- Feign Start -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Feign End -->
3.2、启动类(Application)
在启动类上添加@EnableFeignClients
注解,启用Feign服务调用功能:
package com.zhoumo.nacos.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
// Nacos服务注册与发现
@EnableDiscoveryClient
// Feign服务调用
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
3.3、远程调用接口(Client)
- 创建远程调用接口,指定Feign调用服务名,并在接口中定义需要调用的服务方法; name-被调用服务名,fallback-调用失败处理类
package com.zhoumo.nacos.consumer.client;
import com.zhoumo.nacos.consumer.client.fallback.ProviderServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "service-provider", fallback = ProviderServiceFallback.class)
public interface ProviderClient {
@RequestMapping("/provider/hello")
String hello();
}
- 当Feign调用服务失败时,便会进入相应的处理方法中。
package com.zhoumo.nacos.consumer.client.fallback;
import com.zhoumo.nacos.consumer.client.ProviderClient;
import org.springframework.stereotype.Component;
@Component
public class ProviderServiceFallback implements ProviderClient {
@Override
public String hello() {
return "Remote call to nacos-provider failed!";
}
}
四、启动项目验证是否注册成功
通过浏览器访问Nacos Server:http://192.168.145.129:8848/nacos;然后点击服务列表,即可查看到该服务已注册到Nacos Server上:
五、浏览器访问测试接口
六、测试服务调用失败
- 在配置文件中打开Hystrix熔断功能;
feign:
hystrix:
enabled: true
- 关闭服务提供者(nacos-provider);
- 刷新浏览器,查看调用结果。
七、总结
本文详细介绍了如何在项目中使用Feign来进行服务调用的完整步骤,以及开启服务熔断处理服务调用失败的情况。并在上篇文章的基础上,用Feign替代RestTemplate实现服务调用案例演示。