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

news2024/11/16 13:33:24

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=discover

spring.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.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=true

spring.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=1

spring.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=8082

spring.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=
  • user-service配置
spring.application.name=user-service
# 应用服务 WEB 访问端口
server.port=8086

spring.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>

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


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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 Java Web 的校园驿站管理系统

TOC ssm016基于 Java Web 的校园驿站管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。…

嵌入式学习(TCP通信和抓包)

粘包问题&#xff1a; TCP协议在传输时&#xff0c;可能会遇到粘包的问题。造成这个问题的原因&#xff0c;是因为tcp流式套接字&#xff0c;数据之间没有边界造成的。导致了多次的数据&#xff0c;粘黏在一起。 解决方法&#xff1a; 1、规定一些数据与数据之间的间隔符 2、…

访客管理系统 对接微信公众号,发送通知消息

微信公众号模板消息 - 要实现的效果图 1 公众号设置对接的域名 打开【公众号设置】 公众号设置域名&#xff0c;需要先用http server做安全验证。 安全验证成功后&#xff0c;域名配置完毕。 2 获取公众号APPID 和 Secret 3 开通模板消息 官方审核需要2-3日 4 设置IP白名单&…

鸿蒙HarmonyOS编程开发:TLS单向认证通讯示例

1.TLS简介 TLS&#xff08;Transport Layer Security&#xff09;协议的前身是SSL&#xff08;Secure Socket Layer&#xff09;安全套接层协议&#xff0c;由Netscape公司于1994年提出&#xff0c;是一套网络通信安全协议。IETF&#xff08;The Internet Engineering Task Fo…

谷粒商城实战笔记-244~247-商城业务-购物车-获取合并购物车

文章目录 一&#xff0c;244-商城业务-购物车-获取&合并购物车1&#xff0c;在线购物车和临时购物车的合并 二&#xff0c;245-商城业务-购物车-选中购物项三&#xff0c;246-商城业务-购物车-改变购物项数量四&#xff0c;247-商城业务-购物车-删除购物项五&#xff0c;修…

揭秘电子版招生简章的制作方法!

随着科技的不断发展&#xff0c;越来越多的学校和企业开始采用电子版招生简章来代替传统的纸质版招生简章。电子版招生简章不仅能够节省印刷成本&#xff0c;还可以通过互联网进行快速传播&#xff0c;提高宣传效果。那么&#xff0c;如何制作一份精美的电子版招生简章呢&#…

USART串口通讯函数实现 (基于寄存器)

环境 芯片:STM32F103ZET6 库&#xff1a;来自HAL的STM32F1XX.H 原理图 如图可知TX和RX两条线接到了PA9和PA10 Driver_USART1.h #ifndef __DRIVER_USART1_H #define __DRIVER_USART1_H#include "stm32f1xx.h"/*** 初始化USART1 完成相关配置 能够调用下面收发数据…

基于Java的汽车在线销售系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术 MySQL数据库 B/S结构 SSM框架 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展…

学院党员管理系统

TOC ssm002学院党员管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各行业&#…

从零开始学习深度学习库-6:集成新的自动微分模块和MNIST数字分类器

在上一篇文章中&#xff0c;我们完成了自动微分模块的代码。深度学习库依赖于自动微分模块来处理模型训练期间的反向传播过程。然而&#xff0c;我们的库目前还是“手工”计算权重导数。现在我们拥有了自己的自动微分模块&#xff0c;接下来让我们的库使用它来执行反向传播吧&a…

【深度分析】从《黑神话:悟空》看国产游戏的出海之路

8月20日&#xff0c;中国3A游戏《黑神话&#xff1a;悟空》正式上线并全球发行。正式发布后不到一小时&#xff0c;《黑神话&#xff1a;悟空》就超越《CS2》成为Steam&#xff08;全球最大的综合性数字发行平台之一&#xff09;最受欢迎游戏排行榜冠军&#xff0c;同时在线玩家…

进阶-3.SQL优化

SQL优化 1. 插入数据2.主键优化3.order by 优化4.group by 优化5.limit优化6.count优化7.update优化8.总结 1. 插入数据 insert优化 批量插入 insert into user values(1,tom),(2,Cat),(3,Hello);手动事务提交 start transaction; insert into user values(1,tom),(2,Cat),…

区块链浪潮:Web3时代的数字经济新格局

随着科技的迅猛发展&#xff0c;全球经济正迎来一场前所未有的变革&#xff0c;区块链技术正在其中扮演着关键角色。Web3作为下一代互联网的核心&#xff0c;正在通过区块链技术重塑数字经济的格局&#xff0c;为全球市场带来新的机遇和挑战。这场以去中心化为特征的技术革命&a…

『功能项目』鼠标双击人物跟随【03】

我们打开上一篇02的射线点击项目&#xff0c; 本章要做的事情是在PlayerRayNavgation脚本中添加一个双击跟随函数&#xff0c;实现人物在场景中鼠标双击后主角跟随鼠标移动功能。 添加代码后保存代码运行项目&#xff0c;鼠标双击后主角即可实现跟随鼠标移动效果。 本篇只实现了…

PHP之 in_array判断出来的结果错误

示例 <?php $a "[232087,232468,234691,235390,235513,235550,235573,235611,235636,235637,235652,235672,235674,235695,235697,235711,235721,235733,235739,235754,235764,235795,235808,235833,235834,235836,235857,235861,235870,235883,235887,235888,23591…

STM32————SPI硬件外设实现读写

首先是理论知识&#xff1a; 常用8位数据帧、高位先行 SPI的时钟由PCLK内部时钟分频得来&#xff0c;最大可到36MHz 精简为半双工就是去掉一根数据线后&#xff0c;用剩下的一根作为发送/接收数据&#xff1b;单工就是去掉接收线&#xff0c;只用发送线进行发送数据&#xf…

python绘制爱心代码

效果展示 完整代码 Python中绘制爱心的代码可以通过多种方式实现&#xff0c;高级的爱心代码通常指的是使用较复杂的算法或者图形库来生成更加精致的爱心图形。下面是一个使用Python的Turtle模块来绘制爱心的示例代码&#xff1a; import turtledef draw_love():turtle.speed…

python-货物种类(赛氪OJ)

[题目描述] 某电商平台有 n 个仓库&#xff0c;编号从 1 到 n 。当购进某种货物的时候&#xff0c;商家会把货物分散的放在编号相邻的几个仓库中。我们暂时不考虑售出&#xff0c;你是否能知道&#xff0c;当所有货物购买完毕&#xff0c;存放货物种类最多的仓库编号为多少&…

数字身份革命:探索Web3对个人隐私的保护

在数字化时代&#xff0c;个人隐私和数据保护成为越来越重要的话题。随着Web3的兴起&#xff0c;这一领域正在经历一场深刻的变革。Web3不仅仅是技术的演进&#xff0c;更是对个人隐私保护的一次革命性革新。本文将探讨Web3如何通过去中心化技术重新定义数字身份&#xff0c;并…

Moodle集成ONLYOFFICE文档:提高师生协作效率的最佳解决方案

引言 通过一些教育机构和老师朋友的推荐&#xff0c;我最近了解到了一款非常实用的办公软件组合——Moodle与ONLYOFFICE。作为一名教师&#xff0c;日常教学中的文档编辑、课程管理和学生协作是不可避免的任务。虽然市场上有很多办公软件&#xff0c;但Moodle与ONLYOFFICE的结…