SpringCloud(三):Feign远程调用

编写:HorinJsor


前言

在SpringCloud(一)中,使用的是Template方式【远程调用】与【负载均衡】。
在这里插入图片描述
Template存在下面的问题(如上图):
1、代码可读性差,编程体验不统一;
2、参数复杂URL难以维护。

Feign的作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Feign是什么?

Feign是一个声明式(使用注解的方式)的http客户端,他的集成了ribbon,在第二点操作步骤完成后自带【负载均衡】。


二、Feign操作步骤

1.引入依赖:在pom文件中引入Feign依赖(或者在创建项目时选择OpenFeign依赖)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency>

2.开启Feign功能:在消费者(服务调用项目)的启动类添加注解开启Feign的功能

在这里插入图片描述


3.编写Feign客户端:创建一个接口类,编写需要的方法

1.重新创建一个Feign包,新建一个接口类。
2.复制生产者中需要调用服务的方法签名:除了{}外,其他均要复制。传参一定要有注解。

@FeignClient("userservice")//服务名
public interface UserClient {
    @GetMapping("/user/{id}") //路径,传参使用地址栏方式。
    User findById(@PathVariable("id") Long id);
}

注意必要信息:
主要是基于SpringMVC的注解来声明远程调用的信息,比如:

·服务名称:userservice
·请求方式:GET
·请求路径:/user/{id}
·请求参数:Long id
·返回值类型:User


4.用Feign客户端代替RestTemplate

在这里插入图片描述


三、Hystrix熔断器:防止服务雪崩(调用失效的解决方案)

Hystrix必须配合Feign使用!!!

1.创建Hystrix类

思路:
1、在Feign包创建一个Hystrix包;
2、里面创建xxxServiceHystrix类;
3、实现2.3中的需要熔断的Feign客户端接口;
4、实现的方法里面写调用失败后的返回内容

@Component
public class OrderServiceHystrix implements OrderServiceFeign {
	@Override
	public String doOrder() {
	System.out.println("调用下单服务失败,开始走 hystrix");
	return "我是 hystrix 的 doOrder,说明下单失败了";
	}
	......省略其他的熔断器实现方法
}

2.配置文件开启Hystrix熔断器

feign:
	hystrix:
		enabled: true 

*四、Feign的自定义配置

在这里插入图片描述

重点针对日志。


开启自定义配置方式一:使用配置文件

日志全局生效:

feign:
  client:
    config: 
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #  日志级别 

日志局部生效:

feign:
  client:
    config: 
      userservice: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #  日志级别 

开启自定义配置方式二:Java类

1、创建一个配置类:

public class FeignClientConfiguration {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; 
    }
}

2、注解中声明:
如果是全局配置,放到启动类的如下注解内:

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class) 

局部配置,在【2.3Feign客户端类】的注解内:

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class) 

远程调用超时设置

Feign底层是ribbon,此方法可以设置调用等待时常,默认是1s

ribbon: #feign 默认调用 1s 超时
	ReadTimeout: 5000 #修改调用时长为 5s
	ConnectTimeout: 5000 #修改连接时长为 5s

*五、Feign的性能优化

Feign默认采用URLConnection,不支持连接池。
建议采用Apache HttpClient ,支持连接池。

【Feign添加HttpClient的支持】操作步骤:

1.引入依赖

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

2.在yaml中配置

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

*六、如何导入其它model项目

1.在pom导入依赖。
2.如果未注入bean,启动类注解声明:

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

总结

比较适用的微服务架构

在这里插入图片描述

冲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值