Spring Cloud Alibaba 教程 Fegin 篇

Spring Cloud Alibaba 教程 | Feign 篇

写在前面的话: 本笔记在参考网上视频以及博客的基础上,只作为个人学习笔记,如有侵权联系删除,谢谢!

1、Feign替代RestTemplate

1.1 引入依赖


<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
**1.2  添加注解**

启动类添加注解**@EnableFeignClients**开启Feign的功能

@SpringBootApplication
@EnableFeignClients
public class NacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class,args);
    }
}   

1.3 编写客户端,使用@FeignClient(value = “服务提供方服务名”)

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "nacos-provider") //对应的服务提供方的spring.application.name配置
public interface ServiceFeginClient {

    @GetMapping("/nacos-provider/sayHello/getConfig") // 服务提供方的restful请求路径
    String getConfig();

    @GetMapping("/nacos-provider/sayHello/test/{name}")// nacos-provider为服务提供方的context-path,无则不写
    String sayHello(@PathVariable("name") String name);

}

这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:

  • 服务名称:nacos-provider
  • 请求方式:GET
  • 请求路径:/nacos-provider/sayHello/test/{name}
  • 请求参数: String name
  • 返回值类型:String

这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。

1.4 使用Feign客户端


import com.cwh.fegin.ServiceFeginClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("hello")
public class ConsumerController {

    @Autowired
    private ServiceFeginClient serviceFeginClient; //编写的客户端

    @RequestMapping("sayHi/{name}")
    public String sayHello(@PathVariable("name") String name){
         return serviceFeginClient.sayHello(name);
    }

    @RequestMapping("getConfig")
    public String getConfig(){
        return serviceFeginClient.getConfig();
    }

}

1.5 总结

1、引入依赖

2、启动类上加注解@EnableFeignClients

3、使用@FeignClient编写客户端

4、使用FeignClient中定义的方法代替RestTemplate

2、Feign使用优化

Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:

•URLConnection:默认实现,不支持连接池

•Apache HttpClient :支持连接池

•OKHttp:支持连接池

因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。

这里我们用Apache的HttpClient来演示。

1)引入依赖

在Feign客户端的pom文件中引入Apache的HttpClient依赖:


<dependency>
    <groupId>io.github.openfeigngroupId>
    <artifactId>feign-httpclientartifactId>
dependency>

2)配置连接池

在Feign客户端工程的application.yml中添加配置:

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

3)抽取方法

利用Maven分模块开发抽取FeignClient模块

Spring Cloud Alibaba 教程 Fegin 篇_第1张图片

添加依赖:


<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

在使用该客户端的启动类@EnableFeignClients注解上添加扫描包路径

@EnableFeignClients(basePackages = "com.cwh.feign")

同时引入feign-api公共包

<dependency>
    <groupId>com.cwhgroupId>
    <artifactId>feign-apiartifactId>
    <version>0.0.1-SNAPSHOTversion>
dependency>

同时引入feign-api公共包

<dependency>
    <groupId>com.cwhgroupId>
    <artifactId>feign-apiartifactId>
    <version>0.0.1-SNAPSHOTversion>
dependency>

在使用该客户端的地方注入即可。

你可能感兴趣的:(Spring,Cloud,spring,cloud,feign)