SpringCloud之OpenFeign的基础使用

简介:

OpenFeign集成了Ribbon,Ribbon又集成了eureka,通过OpenFeign基于注解可以快速简单的开发服务客户端,并完成服务发现和客户端负载均衡。

总结:
1)OpenFeign是实现服务调用及负载均衡的。
2)OpenFeign底层封装了ribbon – 底层还是靠ribbon完成,但是不再直面ribbon。
3)OpenFeign主要是通过一套注解来玩,简单 快速。

使用:

第一步:pom文件:

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

第二步:调用方主启动类上添加注解@EnableFeignClients

//表示由OpenFeign管理当前客户端 --- 由OpenFeign管理当前服务发出的远程(服务)调用的请求
@EnableFeignClients
//标记eureka客户端
@EnableEurekaClient
@SpringBootApplication
public class ServiceCApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceCApplication.class, args);
    }
}

第三步:定义Feign接口,接口上添加@FeignClient注解

/*
  3.定义feign接口:
    1)标注@FeignClient注解的接口称为feign接口;value属性的值给出需要调用的服务的主机名
    2)目的:是指定调用的服务以及服务的接口
      1]@FeignClient注解的value属性指定调用的服务名
      2]服务的接口通过feign接口中的方法签名指定;
 */
@FeignClient(value = "service-d")
public interface ServiceCServiceDFeign {

    /*
      定义被调用服务的url接口的方法签名:
      跟被调用服务的url接口的方法一模一样(修饰符 返回值类型 参数 注解),
      仅仅是没有方法体;
      ----------------------------------------------------------
      该方法签名就表示service-c服务要调用service-d服务的/hello接口
     */
    @RequestMapping("/hello")
    public String hello();
}

第四步:在浏览器访问的服务器的controller中注入该接口

/*
      4.注入feign接口:
     */
    @Autowired
    private ServiceCServiceDFeign serviceCServiceDFeign;

    //url接口/doHello
    @RequestMapping("/doHello")
    public String doHello(){

        //5.在消费者服务的url接口中通过调用feign的方法签名,实现对被调用服务的url接口的访问
        String result = serviceCServiceDFeign.hello();

        return result;
    }

补充:

#ribbon默认请求超时时长为1s,在配置文件中通过ribbon.ReadTimeout属性和ribbon.ConnectTimeout属性可以修改
#设置请求超时时长为3秒
ribbon.ReadTimeout=3000
#设置连接超时时长也为3秒
ribbon.ConnectTime=3000
OpenFeign的负载均衡默认为轮询方式
修改方式参考Ribbon的修改方式

实现机制:

1)OpenFeign通过反射机制为feign接口创建出一个代理对象
2)拿到feign接口上的@FeignClient注解的value值,解析出url:http://order-service
3)拿到feign接口中的方法签名上的@RequestMapping注解,解析出url:http://order-service/doOrder
4)将解析出的url交给ribbon
5)ribbon截取出url地址中的服务名
6)从服务列表中找到该名称的服务的实例集合(服务发现)
7)根据负载均衡算法选出一个实例(默认是轮询算法)
8)拿到该实例的ip和port,替换原来url中的服务名
9)发送真正的请求:restTemplate.getForObject(“http://ip:port/doOrder”, String.class)

关于传参:

OpenFeign调用传参,需确保提供者服务的请求处理方法和消费者服务的feign接口的方法签名保持一致,包括方法名、参数列表、返回值类型、使用的注解、请求url。

  1. GET请求,通过URL占位符传参(路径参数),参数列表使用@PathVariable。
  2. GET请求,每个基本参数必须加@RequestParam。
  3. POST请求,对象集合等参数,必须加@Requestbody(json)或者@RequestParam(普通方式)。

日志配置:

  1. 向容器中添加枚举Logger.Level的枚举值,开启OpenFeign的日志功能。

    其有四个值:

    NONE:默认的,不显示日志。

    BASE:仅记录请求方法、URL、响应状态码及执行时间。

    HEADERS:在BASE之上增加了请求和响应头的信息。

    FULL:在HEADERS之上增加了请求和响应的正文及无数据,即所有信息。

  2. 在配置文件中通过logging.level.feign接口完整类路径设置日志级别。

演示:


//第一步:
	/*
       向容器中添加枚举Logger.Level的枚举值FULL,开启OpenFeign的日志功能,
       并打印所有信息;
     */
    @Bean
    public Logger.Level feignLogger(){
        return Logger.Level.FULL;
    }
#第二步:设置日志级别为debug级别
logging.level.com.mmy.feign.UserOrderFeign=debug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值