好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SpringCloud基于Feign的可编程式接口调用实现

前言

Feign 可以替代 RestTemplate 完成可编程式接口调用,并且内部集成 Ribbon 实现了负载均衡

一、基本使用

1.引依赖

pom文件增加 openfeign 依赖

?

1

2

3

4

5

<!-- feign -->

< dependency >

     < groupId >org.springframework.cloud</ groupId >

     < artifactId >spring-cloud-starter-openfeign</ artifactId >

</ dependency >

2.加注解

启动类上增加 @EnableFeignClients 注解

?

1

2

3

4

5

6

7

8

@EnableFeignClients

@SpringBootApplication

public class OrderApplication {

 

     public static void main(String[] args) {

         SpringApplication.run(OrderApplication. class , args);

     }

}

3.声明接口

创建client包,包下放使用到的接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package com.cxstar.client;

 

import com.alibaba.fastjson.JSONObject;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

 

@FeignClient ( "bookschina-service" )

@RequestMapping ( "/bookschina" )

public interface BookschinaClient {

 

     @GetMapping ( "/spiderBookList/{searchkey}/{pageno}" )

     JSONObject searchBookschina(

             @PathVariable ( "searchkey" ) String searchKey,

             @PathVariable ( "pageno" ) Integer pageNo

     );

 

}

直接把你需要调用的微服务里的controller类复制一份过来,修修改改就行了
ps:
1.@FeignClient([bookschina-service]):访问 spring.application.name=bookschina-service 的微服务
2.@RequestMapping、@GetMapping、@PathVariable 用来映射地址,和controller中的用法一样
3.上面这个接口对应的就是 bookschina-service 微服务下映射地址为 /bookschina/spiderBookList/{searchkey}/{pageno} 的controller类方法

4.调用

测试类如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

package com.cxstar;

 

import com.alibaba.fastjson.JSONObject;

import com.cxstar.client.BookschinaClient;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

 

 

@Slf4j

@SpringBootTest

class OrderApplicationTests {

 

     @Autowired

     private BookschinaClient bookschinaClient;

 

     void booksChinaTest() {

    

         // 参数

         String searchKey = "东野圭吾" ;

         Integer pageNo = 1 ;

         // 调用

         JSONObject booksJB = bookschinaClient.searchBookschina(searchKey, pageNo);

         log.info(booksJB.toString());

 

     }

 

}

二、进阶

1.日志配置

application 文件中加入配置

?

1

2

3

4

5

feign:

   client:

     config:

       default:                      # default 全局配置,局部配置的话可以换成请求的服务名称

         loggerLevel: NONE           # 日志级别 NONE BASIC HEADERS FULL

ps:
1.NONE:没有日志
2.BASIC:记录http请求发送目标、发送时间、返回时间、总耗时等信息
3.HEADERS:在 BASIC 基础上记录 请求头 和 响应头 信息
4.FULL:在 BASIC 和 HEADERS 的基础上记录 请求体 和 响应体 信息
5.上线后为了优化性能 日志级别尽量用 NONE 或者 BASIC

2.性能优化

Feign底层客户端默认实现是 URLConnection,不支持连接池,每次http请求都要三次握手,断开时四次挥手,有点浪费性能,可以用 Apache HttpClient 替代 URLConnection

<1>pom 引入依赖

?

1

2

3

4

5

<!-- feign 连接池 -->

< dependency >

     < groupId >io.github.openfeign</ groupId >

     < artifactId >feign-httpclient</ artifactId >

</ dependency >

<2>application 文件中加入配置

?

1

2

3

4

5

feign:

   httpclient:

     enabled: true                   # 开启feign对 httpclient 的支持

     max-connections: 200            # 最大连接数

     max-connections-per-route: 50   # 每个请求接口的最大连接数

ps:
1.max-connections 和 max-connections-per-route 的值需要根据具体情况设定

到此这篇关于SpringCloud基于Feign的可编程式接口调用实现的文章就介绍到这了,更多相关SpringCloud Feign可编程式接口调用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_43721000/article/details/124214887

查看更多关于SpringCloud基于Feign的可编程式接口调用实现的详细内容...

  阅读:20次