openfeign-----入门
什么是openfeign?
OpenFeign 是 SpringCloud 在 Feign 的基础上支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
为什么要用openfeign?
openfeign:面向接口编程,把你需要调用的服务接口封装到接口里面,通过调用接口去调用远程的接口,使用方法简单,通俗易懂,注解+接口形式。
如何使用openfeign?
这里使用Nacos作为注册中心。
我项目结构如下,这里在applet-api项目里面调用order-api的项目,前提是,这两个项目都要注册进Nacos里面。(博主有一篇博客是专门讲Nacos的,这里就不详细讲如何注册进Nacos了。)
如果这两个服务都在Nacos里面,那么久可以使用openfeign实现远程调用了。
目的:applet-api服务调用/order/getPort接口,获取order-api的端口号
1、在order-api服务新建一个接口,拿到该服务的端口号
@RestController
@RequestMapping("/order")
public class OrderController {
@Value("${server.port}")
private String port;
@GetMapping("/getPort")
private String orderController(){
return port;
}
}
2、applet-api服务引入注解
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3、applet-api的启动类贴上@EnableFeignClients注解
@EnableDiscoveryClient
@SpringCloudApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、定义一个接口,贴上@FeignClient注解。
@FeignClient(value = "gfh-order-api")
public interface OpenFeignOrder {
@GetMapping("/order/getPort")
public String getPort();
}
value:你需要调用的服务的名称,这里调用的服务必须是要注册进注册中心的服务。
/order/queryDetailById:这个接口是在gfh-order-api里面的接口,也就是你要调用的接口。
@GetMapping :你调用这个接口的请求方式,get请求就用@GetMapping,post请求就用@PostMapping
接口的名字自定义,参数要跟你请求接口的参数一致。记得要贴上@RequestParam注解,对象的话要贴@RequestBody注解。
5、写一个controller,调用这个接口
@RestController
@RequestMapping("/openfeign")
public class OpenFeignController {
@Autowired
private BusinessLogicService businessLogicService;
@GetMapping("/getPort")
public String getPort(){
return businessLogicService.getPort();
}
}
6、service层:
@Service
public class BusinessLogicService {
@Autowired
private OpenFeignOrder openFeignOrder;
public String getPort() {
return openFeignOrder.getPort();
7、请求接口,可以看到,返回的结果就是order-api服务的端口号
进一步了解openfeign
一、 超时时间设置
openfeign默认的连接时间是1秒钟,如果你调用接口的时间超过1秒钟,那么就会报连接超时的错误。
调用接口的服务的配置文件加上配置
#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的实际
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
重启服务,可以发现,接口调用成功,不会出现超时的错误了。
后续持续更新…