您的位置:首页 > 科技 > 能源 > 【Java】从零到一使用Feign与Sentinel (详细图解)

【Java】从零到一使用Feign与Sentinel (详细图解)

2024/9/30 7:59:49 来源:https://blog.csdn.net/m0_66070037/article/details/141463849  浏览:    关键词:【Java】从零到一使用Feign与Sentinel (详细图解)

Java系列文章目录

补充内容 Windows通过SSH连接Linux
第一章 Linux基本命令的学习与Linux历史


文章目录

  • Java系列文章目录
  • 一、前言
  • 二、学习内容:
  • 三、问题描述
  • 四、解决方案:
    • 4.1 认识依赖
    • 4.1.1 Feign依赖
    • 4.1.2 Sentinel依赖
    • 4.1.3 负载均衡依赖
    • 4.2 父子项目配置
      • 4.2.1 项目结构
      • 4.2.2 依赖引入
    • 4.3 Feign的使用
      • 4.3.1 两个服务间的调用
      • 4.3.2 Feign调用的注意事项
    • 4.4 Sentinel的使用
  • 五、总结:
    • 5.1 Feign总结
    • 5.2 Sentinel总结
    • 5.3 参考代码

一、前言

目的

  • 从零到一学习搭建Feign与Sentinel
  • 先自己配好Knife4j与Sentinel

最终效果

  • 服务间能互相调用
  • 能监控

二、学习内容:

  • 网关配置

🌟 Feign的使用
🌟 Sentinel的使用


三、问题描述

  • 主要记录创建全过程还有配置时候出现的错误

四、解决方案:

4.1 认识依赖

4.1.1 Feign依赖

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

4.1.2 Sentinel依赖


<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

4.1.3 负载均衡依赖

🌟 负载均衡依赖跟微服务相关项目的都要加不然会出错

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

4.2 父子项目配置

4.2.1 项目结构

之前文章讲过不做具体讲述

  • 按之前文章那样配置项目关系

建立如下项目:
在这里插入图片描述

4.2.2 依赖引入

直接通过脚手架建立项目

🌟 注意父子项目都必须是相同配置

初始需要加入的依赖:

  • 通过Spring Web引入Spring Boot
  • 通过Nacos引入Spring Cloud Alibaba
  • 通过Gateway引入Spring Cloud

脚手架生成的配置:
在这里插入图片描述

4.3 Feign的使用

4.3.1 两个服务间的调用

假设通过order-service访问User-service

  • 绿色框是另一个服务的方法
  • GetMapping里面的参数要跟被请求的接口保持一致

🌟 使用Feign别忘了启动类加上相关注解

访问流程:
在这里插入图片描述

  • 打开网关Knife4j
    注意网关依赖别引错
    在这里插入图片描述
  • 后台order-service的服务

在这里插入图片描述

  • 后台user-service的服务

可以看到我们访问order服务后order服务调用了user服务的方法

在这里插入图片描述

4.3.2 Feign调用的注意事项

🌟 如果是通过id访问的一定要显式指出

在这里插入图片描述

🌟 由于我引入了Nacos,加入Config依赖且没有配置

在这里插入图片描述

4.4 Sentinel的使用

  • 访问地址 http://localhost:8858/
  • 我用docker建的sentinel

在这里插入图片描述

  • fallback是失败后会执行的内容

在这里插入图片描述

  • 配置类加上相关sentinel依赖
# 取消Sentinel控制台懒加载
# 默认情况下 Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包
# 配置 sentinel.eager=true 时,取消Sentinel控制台懒加载功能
spring.cloud.sentinel.eager=true
# 如果有多套网络,又无法正确获取本机IP,则需要使用下面的参数设置当前机器可被外部访问的IP地址,供admin控制台使用
# spring.cloud.sentinel.transport.client-ip=
  • 我只在order-service加了配置与依赖

监控如下:
在这里插入图片描述


五、总结:

5.1 Feign总结

🌟 注意负载均衡依赖要加上
🌟 使用id的时候注意是显示使用
🌟 启动类要加注解
🌟 调用的方法参数要对应上

5.2 Sentinel总结

⭐️ 注意配置要写

5.3 参考代码

  • gateway配置
server.port=9999
spring.application.name=gateway# knife4j整合所有的微服务
knife4j.gateway.discovery.enabled=true
knife4j.gateway.enabled=true
knife4j.gateway.tags-sorter=order
knife4j.gateway.operations-sorter=order
knife4j.gateway.strategy=discoverspring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=publicspring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-origin-patterns=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials=true
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[0]=GET
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[1]=POST
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[2]=PUT
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[3]=OPTIONS
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[4]=DELETE
spring.cloud.gateway.discovery.locator.enabled=truespring.cloud.gateway.routes[0].id=user-service
spring.cloud.gateway.routes[0].uri=lb://user-service
spring.cloud.gateway.routes[0].predicates[0]=Path=/user_service/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1spring.cloud.gateway.routes[1].id=order-service
spring.cloud.gateway.routes[1].uri=lb://order-service
spring.cloud.gateway.routes[1].predicates[0]=Path=/order_service/**
spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1
  • order-service配置
spring.application.name=order-service
server.port=8082spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=publicspring.cloud.sentinel.transport.dashboard=localhost:8858
# 取消Sentinel控制台懒加载
# 默认情况下 Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包
# 配置 sentinel.eager=true 时,取消Sentinel控制台懒加载功能
spring.cloud.sentinel.eager=true
# 如果有多套网络,又无法正确获取本机IP,则需要使用下面的参数设置当前机器可被外部访问的IP地址,供admin控制台使用
# spring.cloud.sentinel.transport.client-ip=
  • user-service配置
spring.application.name=user-service
# 应用服务 WEB 访问端口
server.port=8086spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=public
spring.cloud.sentinel.transport.dashboard=localhost:8858
# 取消Sentinel控制台懒加载
# 默认情况下 Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包
# 配置 sentinel.eager=true 时,取消Sentinel控制台懒加载功能
spring.cloud.sentinel.eager=true
# 如果有多套网络,又无法正确获取本机IP,则需要使用下面的参数设置当前机器可被外部访问的IP地址,供admin控制台使用
# spring.cloud.sentinel.transport.client-ip=
  • gateway依赖
    <parent><groupId>org.example</groupId><artifactId>SentinalAndFeign</artifactId><version>0.0.1-SNAPSHOT</version></parent><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
  • 父项目依赖
   <packaging>pom</packaging><modules><module>user-service</module><module>gateway</module><module>order-service</module></modules><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.0.2</spring-boot.version><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version><spring-cloud.version>2022.0.0-RC2</spring-cloud.version></properties><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency></dependencies><dependencyManagement><dependencies>
<!--            版本控制--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.4.0</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

(后续有遇到问题再添加)


声明:如本内容中存在错误或不准确之处,欢迎指正。转载时请注明原作者信息(麻辣香蝈蝈)。

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com