Feign远程调用

Feign是什么

feign是一个声明式的http客户端官方地址:https://github.com/OpenFeigh/feign
其作用就是帮助我们优雅的实现http请求的发送

使用Feign

1.引入依赖:

	<!--feign客户端依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

2.在微服务的启动类添加注解开启Feign的功能:

	@EnableFeignClients

3.编写Feign客户端,之后直接调用就好了:

package cn.itcast.order.clients;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findeByid(@PathVariable Long id);
}

自定义Feign的配置

在这里插入图片描述
一般需配置的就是日志级别

一:配置日志:

方式1:yml配置文件修改

全局生效:
feign:
	client:
		config:
			default:	#	这里用default就是全局配置,如果是些服务名称,就是某个微服务的配置
				loggerLevel:FULL	
局部生效:
	feign:
		client:
			config:
				userserivce:	#	这里用default就是全局配置,如果是些服务名称,就是某个微服务的配置
					loggerLevel:FULL	

方式2:java代码方式,

1.需要先声明一个Bean:
public class FeignClientConfiguration{
	@Bean
	public Logger.Level feignLogLevel(){
		return Logger.Level.BASIC;
	}
}
2.之后如果是需要全局生效,则把他放在@EnableFeignClients注解中
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
3.如果是局部配置,则把他放在@FeignClient这个注解中:
@FeignClient(value = "userservice",configuration = FeignClientConfiguration.clss)

二:配置响应结果解析器

三:配置请求参数编码

四:配置注解格式

五:配置失败重试机制

feign的性能优化

feign底层的客户端实现:

	urlconnection:默认实现,不支持连接
	apache httpclient:支持连接池
	okhttp:支持连接池

因此优化feign的性能主要包括:
1.使用连接池代替默认的urlconnection
2.日志级别,最好用basic或none

优化连接池步骤

一:引入httpclient依赖

 <!--feign添加httpclient的依赖-->
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
    </dependency>

二:配置yml

feign:
 httpclient:
   enabled: true  # 支持httpCLient的开关
   max-connections: 200 # 最大连接数
   max-connections-per-route: 50 # 单个路径的最大连接数

feign的最佳实践

方式一(继承):给消费者的Feignclient和提供者的controller定义统一的父接口作为标准

方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用

方式二(抽取):实现步骤:

1.首先创建一个module,命名为feign-api,然后引入feign的starter依赖
2.将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
3.在order-service中引入feign-api的依赖
4.修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
5.重启测试
6.当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种方式解决:
方式一:指定FeignClient所在包

在消费者的启动类上添加

	@EnableFeignClients(basePackages = "包名")
方式二:指定FeignClient字节码

在消费者的启动类上添加

	@EnableFeignClients(clients = {UserClient.class})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值