前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenFeign组件

OpenFeign组件

作者头像
别团等shy哥发育
发布2023-02-25 15:45:25
2630
发布2023-02-25 15:45:25
举报
文章被收录于专栏:全栈开发那些事

文章目录

1、OpenFeign组件简介

Spring Cloud Feign是一个HTTP请求调用的轻量级框架,可以以Java接口注解的方式调用HTTP请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性(可以使用springmvc的注解),可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,默认实现了负载均衡的效果并且springcloud为feign添加了springmvc注解的支持。

2、使用RestTemplate+Ribbon已经完成服务调用,为什么还要使用Feign?

代码语言:javascript
复制
String restTemplateForObject = restTemplate.getForObject("http://服务名/url?参数" + name, String.class);

存在问题:

  • 1.每次调用服务都需要写这些代码,存在大量的代码冗余
  • 2.服务地址如果修改,维护成本增高
  • 3.使用时不够灵活

3、OpenFeign服务调用

3.1 创建两个独立的SpringBoot应用,并注册到服务注册中心(这里我用的consul服务注册中心)

一个类别服务 一个商品服务

3.2 引入服务注册中心依赖

两个服务都引入

代码语言:javascript
复制
 		<!--consul client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

3.3 修改配置文件

类别服务:

代码语言:javascript
复制
server.port=8787
spring.application.name=CATEGORY

#注册到consul server
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

商品服务:

代码语言:javascript
复制
server.port=8788
spring.application.name=PRODUCT


#注册到consul server
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

3.4 入口类加注解

类别服务:

商品服务:

项目结构:

3.5 在服务调用放引入OpenFeign依赖

由于我们是在类别服务中调用商品服务,所以给类别服务引入下面的依赖:

代码语言:javascript
复制
<!--Open Feign依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

3.6 在服务调用方入口类加如注解,开启Feign调用支持

3.7 开发客户端接口

在类别服务中开发接口ProductClient

代码语言:javascript
复制
package com.baizhi.FeignClient;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

//调用商品服务接口
@FeignClient(value = "PRODUCT") //value:用来书写调用服务Id
public interface ProductClient {

    //调用商品服务
    @GetMapping("/product")
    String product();

    @GetMapping("list")
    String list();
}

下面这句用来指明需要调用的服务ID(默认就是Spring.application.name的值,我们类别服务名称为CATEGORY,商品服务名称为PRODUCT)

代码语言:javascript
复制
@FeignClient(value = "PRODUCT")

注意上面接口中的方法的请求方式和访问路径要和被调用的服务保持一致,由于我么是类别服务调用商品服务,所以查看下商品服务的控制器:

可以看到,上述的路径和请求方式都保持一致

3.8 服务调用测试

将商品服务设定为两个服务节点,两个不同端口都注册商品服务组成简单集群,顺便测试下负载均衡。

查看服务注册中心:localhost:8500

类别服务的控制器:

访问:http://localhost:8787/category通过类别服务调用商品服务,顺便通过日志检查负载均衡。

由于默认使用的负载均衡算法是轮询,所以就会一致在8788和8799之间切换,我们多刷新几次再查看日志:

可以看到,负载均衡的算法是轮询法,由于我们是一个控制器中调用了两个商品服务,所以可以看到接收请求的服务端口一直在变。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1、OpenFeign组件简介
  • 2、使用RestTemplate+Ribbon已经完成服务调用,为什么还要使用Feign?
  • 3、OpenFeign服务调用
    • 3.1 创建两个独立的SpringBoot应用,并注册到服务注册中心(这里我用的consul服务注册中心)
      • 3.2 引入服务注册中心依赖
        • 3.3 修改配置文件
          • 3.4 入口类加注解
            • 3.5 在服务调用放引入OpenFeign依赖
              • 3.6 在服务调用方入口类加如注解,开启Feign调用支持
                • 3.7 开发客户端接口
                  • 3.8 服务调用测试
                  相关产品与服务
                  负载均衡
                  负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档