openfeign-----入门

openfeign-----入门

  • 什么是openfeign?
  • 为什么要用openfeign?
  • 如何使用openfeign?
  • 进一步了解openfeign
    • 一、 超时时间设置

什么是openfeign?

OpenFeign 是 SpringCloud 在 Feign 的基础上支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

为什么要用openfeign?

openfeign:面向接口编程,把你需要调用的服务接口封装到接口里面,通过调用接口去调用远程的接口,使用方法简单,通俗易懂,注解+接口形式。

如何使用openfeign?

这里使用Nacos作为注册中心。

我项目结构如下,这里在applet-api项目里面调用order-api的项目,前提是,这两个项目都要注册进Nacos里面。(博主有一篇博客是专门讲Nacos的,这里就不详细讲如何注册进Nacos了。)
openfeign-----入门_第1张图片
如果这两个服务都在Nacos里面,那么久可以使用openfeign实现远程调用了。
openfeign-----入门_第2张图片
目的: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-----入门_第3张图片

进一步了解openfeign

一、 超时时间设置

openfeign默认的连接时间是1秒钟,如果你调用接口的时间超过1秒钟,那么就会报连接超时的错误。
openfeign-----入门_第4张图片
调用接口的服务的配置文件加上配置

#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的实际
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

重启服务,可以发现,接口调用成功,不会出现超时的错误了。

后续持续更新…

你可能感兴趣的:(Java技术,java)