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

ops/2024/9/22 15:40:44/

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 认识依赖

Feign_41">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 依赖引入

直接通过脚手架建立项目

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

初始需要加入的依赖:

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

Feign_102">4.3 Feign的使用

4.3.1 两个服务间的调用

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

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

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

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

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

在这里插入图片描述

  • 后台user-service的服务

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

在这里插入图片描述

Feign_127">4.3.2 Feign调用的注意事项

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

在这里插入图片描述

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

在这里插入图片描述

4.4 Sentinel的使用

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

在这里插入图片描述

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

在这里插入图片描述

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

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


五、总结:

Feign_168">5.1 Feign总结

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

5.2 Sentinel总结

⭐️ 注意配置要写

5.3 参考代码

  • gateway配置
java">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配置
java">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配置
java">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依赖
java">    <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>
  • 父项目依赖
java">   <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>

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


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

在这里插入图片描述


http://www.ppmy.cn/ops/98674.html

相关文章

小程序-公告滚动

<view class"bg_box icon_nav_box" style"margin-top: -70rpx;position: relative;"><view class"flex flex_y_center"><view class"c_red f32" style"font-style: italic;flex-shrink:0 ;">最新公告<…

【Leetcode 1805 】 字符串中不同整数的数目—— 双指针

给你一个字符串 word &#xff0c;该字符串由数字和小写英文字母组成。 请你用空格替换每个不是数字的字符。例如&#xff0c;"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意&#xff0c;剩下的这些整数为&#xff08;相邻彼此至少有一个空格隔开&am…

【PGCCC】PostgreSQL中的内存表架构与实现

在数据库系统中&#xff0c;内存表&#xff08;In-Memory Tables&#xff09;作为一种高效的数据存储方式&#xff0c;可以显著提升数据库的响应速度&#xff0c;特别是在需要频繁读写的场景下。PostgreSQL作为一款功能强大的开源数据库&#xff0c;也为我们提供了创建和使用内…

淘宝(天猫)商品详情数据接口在自有电商平台的应用!

在电商市场的日益成熟下&#xff0c;越来越多的电商参与者上线了自主研发的电商平台。这主要是因为&#xff0c;在电商销售中&#xff0c;品牌在自有电商平台售卖商品的优势颇多&#xff1a; 自有的电商平台能够赋予品牌更大的灵活性和自由度等&#xff0c;品牌商品销售时无需…

windows C++-WRL技术(一)

Windows 运行时 C 模板库 (WRL) 是一个提供低级别方式来创作和使用 Windows运行时组件的模板库。 WRL 现在已由 C/WinRT 取代。C/WinRT 是 Windows 运行时 API 的标准 C17 语言投影。 从版本 1803 (10.0.17134.0) 起&#xff0c;C/WinRT 在 Windows SDK 中提供。 C/WinRT 完全…

动态规划篇-代码随想录算法训练营第三十六天l 279.完全平方数,139.单词拆分,多重背包问题

279.完全平方数 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 换汤不换药&#xff01;| LeetCode&#xff1a;279.完全平方数 题目描述&#xff1a; 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方…

分享一个基于python的抖音短视频流量数据分析与可视化系统Hive大数据源码(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…