目录
2.为需要调用的服务创建接口,在接口中添加注解和路径。Feign通过动态代理生成这个接口的实现类,调用远程服务返回结果。
3.在消费端启动上添加@EnableFeignClients,开启Feign功能。
1.创建一个失败信息处理类继承入门案例中定义的接口,实现方法返回需要返回的错误信息,在类中添加@Component注解,将类交给Spring管理
2.在接口名上声明错误信息返回类@FeignClient(value = "springcloud-server",fallback = ClientFallBack.class)
概述
Feign可以将对其他微服务的访问进行封装,通过注解使用服务路劲进行访问,不用自己拼接。
入门案例
1.在消费端微服务导入Feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.为需要调用的服务创建接口,在接口中添加注解和路径。Feign通过动态代理生成这个接口的实现类,调用远程服务返回结果。
@FeignClient("springcloud-server")//调用服务的名称
public interface Userserver {
@GetMapping("/testserver/{id}")//路径
User getUser(@PathVariable("id") Integer id);//调用的方法与需要调用的服务中的返回类型和传入参数一致,方法名可以不一样
}
3.在消费端启动上添加@EnableFeignClients,开启Feign功能。
Feign负载均衡
Feign集成了Ribbon组件,在客户端springboot配置文件中配置,Feign自动实现负载均衡
Feign服务降级
feign集成了Hystrix,在消费服务中配置feign.hystrix.enabled= true,开启feign使用hystrix。
案例——feign使用hystrix
1.创建一个失败信息处理类继承入门案例中定义的接口,实现方法返回需要返回的错误信息,在类中添加@Component注解,将类交给Spring管理
package com.example.util;
import com.example.pojo.User;
import com.example.server.Userserver;
import org.springframework.stereotype.Component;
/**
* @program: mylearncode
* @description:
* @author: yuan long
* @create: 2020-12-17 17:05
*/
@Component
public class ClientFallBack implements Userserver {
@Override
public User getUser(Integer id) {
User user=new User();
user.setAge(200);
user.setName("网络拥挤");
return user;
}
}
2.在接口名上声明错误信息返回类@FeignClient(value = "springcloud-server",fallback = ClientFallBack.class)
package com.example.server;
import com.example.pojo.User;
import com.example.util.ClientFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @program: mylearncode
* @description:
* @author: yuan long
* @create: 2020-12-17 16:16
*/
@FeignClient(value = "springcloud-server",fallback = ClientFallBack.class)
public interface Userserver {
@GetMapping("/testserver/{id}")
User getUser(@PathVariable("id") Integer id);
}
请求压缩
feign提供对请求和响应进行压缩的功能。在yml文件中开启请求或响应压缩,压缩类似于通常文件压缩,可以减小传输中传输内容的大小,从而减轻网络压力。压缩功能开启配置如下:
feign:
compression:
request:
enabled: true
response:
enabled: true
日志设置
案例——日志设置
1.创建一个配置类
package com.example.util;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @program: mylearncode
* @description:
* @author: yuan long
* @create: 2020-12-17 17:24
*/
@Configuration //声明配置类
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel(){
/* NONE:不记录任何日志信息,这是默认值。
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。*/
return Logger.Level.FULL;
}
}
2.在Feign会生成代理对象的接口注解FeignClient(value = "springcloud-server",fallback = ClientFallBack.class)中添加@configuration = FeignConfig.class