当前位置: 首页 > article >正文

Spring Cloud之OpenFeign的具体实践

1 基本概念

        OpenFeign基于Feign框架开发,而Feign是Netflix开源的一个声明式Web服务客户端。OpenFeign通过定义接口、注解和动态代理等方式,将服务调用的过程封装起来,使得开发者只需要定义服务接口,而无需关心底层的HTTP请求和序列化等细节。

2 主要作用

  1. 声明式服务调用:OpenFeign允许开发者通过注解的方式定义HTTP请求,无需手动编写底层的HTTP客户端代码。开发者可以像调用本地方法一样调用远程方法,无需感知操作远程HTTP请求。
  2. 支持多种编码格式:OpenFeign能够处理JSON、XML等多种数据格式,并支持自定义序列化和反序列化。
  3. 集成Spring Cloud:与Spring Cloud的集成使得OpenFeign可以与Eureka、Ribbon等组件无缝工作,实现服务发现和负载均衡。
  4. 熔断机制:OpenFeign支持Hystrix熔断器,当被调用的服务发生故障时,熔断器会暂时切断调用,防止错误蔓延。
  5. 日志记录:OpenFeign提供了内置的日志功能,可以帮助开发者调试和监控请求。

3 实现思路

这里有两种实现思路:

  • 思路1:抽取到微服务之外的公共module

  • 思路2:每个微服务自己抽取一个module

如图:

方案1抽取更加简单,工程结构也比较清晰,但缺点是整个项目耦合度偏高。

方案2抽取相对麻烦,工程结构相对更复杂,但服务之间耦合度降低。

这里我们采用方案1。

 

4 具体实现

4.1 Nacos注册中心

现在我们有两个服务,一个购物车服务cart-service,一个商品服务item-service,点击购物车时,需要查询商品信息。两个服务都进行服务注册。

4.1.1 入依赖
<!--nacos 服务注册发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4.1.2 配置文件
spring:
  application:
    name: item-service # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.60.100:8848 # nacos地址
spring:
  application:
    name: cart-service # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.60.100:8848 # nacos地址

4.2 创建一个api服务

4.2.1 导入itemDTO

package com.heima.domain;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel(description = "商品实体")
public class ItemDTO {
    @ApiModelProperty("商品id")
    private Long id;
    @ApiModelProperty("SKU名称")
    private String name;
    @ApiModelProperty("价格(分)")
    private Integer price;
    @ApiModelProperty("库存数量")
    private Integer stock;
    @ApiModelProperty("商品图片")
    private String image;
    @ApiModelProperty("类目名称")
    private String category;
    @ApiModelProperty("品牌名称")
    private String brand;
    @ApiModelProperty("规格")
    private String spec;
    @ApiModelProperty("销量")
    private Integer sold;
    @ApiModelProperty("评论数")
    private Integer commentCount;
    @ApiModelProperty("是否是推广广告,true/false")
    private Boolean isAD;
    @ApiModelProperty("商品状态 1-正常,2-下架,3-删除")
    private Integer status;
}
 4.2.2 引入依赖
  <!--openFeign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--负载均衡器-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>
4.2.3 编写Fegin接口

也就是上图的的ItemClient,cart-service需要调用里面的方法。

@FeignClient("item-service")
public interface ItemClient {

    @GetMapping("/items")
    List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
4.2.4 cart-service需要导入api服务
  <!--feign模块-->
  <dependency>
      <groupId>com.heima</groupId>
      <artifactId>hm-api</artifactId>
      <version>1.0.0</version>
  </dependency>
4.2.5 在cart-service启动类上声明itemClient的位置

两种方式:

方式1:声明扫描包:

方式2:声明要用的FeignClient

 


http://www.kler.cn/news/334416.html

相关文章:

  • Qt如何将外部窗口嵌入部件中
  • 若依--文件上传前端
  • 国创——基于深度学习的实时姿态识别算法
  • 打卡第三天 P5729 【深基5.例7】工艺品制作
  • 【web安全】——SSRF服务器端请求伪造
  • 【Linux】进程控制(创建、终止、等待、替换)
  • 交换排序:冒泡排序、递归实现快速排序
  • 深度学习全景进阶:最新Python深度学习进阶与前沿应用
  • Gitlab flow工作流
  • 力扣刷题之2306.公司命名
  • 春秋云镜靶场之CVE-2022-28525
  • 关于鸿蒙next 调用系统权限麦克风
  • 设计模式(3)builder
  • 序列化与反序列化基础及反序列化漏洞(附案例)
  • S7-200 SMART的数据类型说明
  • Stable Diffusion绘画 | 插件-Deforum:动态视频生成(中篇)
  • 基于Es的分词查询通过高亮效果实现前端高亮显示!!!!
  • 机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
  • GPTQ vs AWQ vs GGUF(GGML) 速览和 GGUF 文件命名规范
  • iTextPDF中,要实现表格中的内容在数据长度超过边框时自动换行