黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day5 全网最快最全

news2024/11/16 16:43:14

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客

这是我的 github https://github.com/Qiuner ⭐️

gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^)

想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎

  • 这篇有不少bug记录与方便您复制的代码,相信一定能节省学习时间同时达到更好的效果
  • 本博客要与原文档搭配使用 day05 - 飞书云文档 (feishu.cn)
  • 介绍了使用Sentinel进行请求限流、线程隔离、服务熔断等操作和分布式事务一致性处理方案 seata
    背景色是愧花黄绿
  • 解决了多个经常出现的bug,对于余下的作业 笔墨不多 本章作业算是比较简单的
  • 这一章,官方文档弄得很详细了,因此我没有很多可以拓展的地方

2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)Day 5 包含作业

image-20240727213603572

雪崩问题描述

  • 刚开始的介绍很好 推荐听一听微服务保护和分布式事务-01.雪崩问题-原因分析_哔哩哔哩_bilibili

image-20240723231953433

image-20240723232033618

微服务单个服务保护思路

一:对请求流量进行限制

image-20240723232212773

二:线程隔离

image-20240723232623074

  • 限制每个服务的线程上线数,但一个服务开始奔溃的时候,不会影响到其他线程

三:服务熔断

image-20240724090825303

  • 添加一个服务失败的处理逻辑

image-20240724091001265

image-20240724091020787

Sentinel

Sentinel的配置

image-20240724102323055

  • 步骤为:1、先在命令行中使用以下命令打开jar包 2、在idea中配置相关依赖 3、在application文件中指定运行的端口
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
  • 在官方文档里有详细的,就不写了

簇点链路

image-20240724105716952

  • 在这里,每个请求都是一个蔟点,每个请求进入服务后就被监控,

image-20240726163004155

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8090 # sentinel的控制台
      http-method-specify: true # 是否 设置请求方式作为资源名称
  • 这样就能实现在sentinel中看到同请求不同请求名

image-20240726170243549

请求限流

image-20240726171400251

image-20240726171642134

线程隔离

image-20240726211111971

  • 给每个业务限定线程数,这样当一个服务用完了属于自己的资源的时候,就无法去侵占别人的线程资源

image-20240726211437597

image-20240726212459007

Fallback

image-20240726213233252

  • Fallback(回退机制)是一种应对服务故障的策略。当某个服务不可用或调用失败时,可以通过回退机制提供一个默认的响应或执行替代逻辑,以避免整个系统的崩溃并提升系统的容错能力。像异常,当请求失败了,不报错,给另外设定好的处理逻辑

使用Fallback

image-20240726213737350

第一步:在依赖中添加相关支持

image-20240726215440701

第二步:创建Fallback类

image-20240726214157004

第三步:声明一个bean

image-20240726214803454

第四步:应用在客户端

image-20240726215505208

服务熔断

image-20240726215618003

image-20240726215650159

image-20240726223809246

  • 这里熔断策略什么的官方文档介绍的很详细了,所以就不写了

分布式事务面对的问题

image-20240726224549667

  • 订单服务在库存服务失败后能够感知到,因此可以进行事务回滚,但是购物车服务做不到。因为它是被调用的

Seata

Seata的三种角色

image-20240726225014833

  • tc是一个总经理,它不管具体服务内容的实现,也不用去落实谁今天上班了,谁今天没上班,底下的人会告诉它。tc要做的就是发现事务失败了,那就进行全部回滚
  • tm是一个小组组长,它知道小组的总体情况,知道小组成员什么时候开始上班,什么时候下班,然后告诉tc
  • rm是组员,组员只要告诉tc自己做没做成功,是的,不是向tm报告做没做成功

seata部署

  • 这里可以看官方文档( https://b11et3un53m.feishu.cn/wiki/QfVrw3sZvihmnPkmALYcUHIDnff),已经很详细了,但是在拉取seata镜像的时候,命令是不太对的,可以使用下面命令

image-20240726230707673

docker load -i /root/seata-1.5.2.tar
  • 然后
docker run --name seata \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=192.168.200.128 \
-v /root/seata:/seata-server/resources \
--privileged=true \
--network Qiuner-net \
-d \
seataio/seata-server:1.5.2

  • 注意变更网络

seata依赖下载很慢的问题

image-20240726232505689

image-20240727094416688

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘globalTransactionScanner’ defined in class path resource [

image-20240727160203669

  • 这个报错,查看自己配置的

image-20240727160555824

报错 io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.

  • 你的seata地址错了

image-20240727161652886

docker run --name seata \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=192.168.150.101 \
-v /root/seata:/seata-server/resources \
--privileged=true \
--network Qiuner-net \
-d \
seataio/seata-server:1.5.2

  • 你在创建seata的时候,这里的ip地址写错了,直接照抄了

网络链接

docker network connect Qiuner-net seata
  • 直接都加一遍就好了,加过了不会再加,不用担心

微服务中引入seata步骤总结:

第一步:引入依赖

image-20240727163601902

<!--统一配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--读取bootstrap文件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--seata-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

第二步:再nacos添加seata依赖设置

image-20240727163704195

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    type: nacos # 注册中心类型 nacos
    nacos:
      server-addr: 192.168.200.128:8848 # nacos地址
      namespace: "" # namespace,默认为空
      group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
      username: nacos
      password: nacos
  tx-service-group: hmall # 事务组名称
  service:
    vgroup-mapping: # 事务组与tc集群的映射关系
      hmall: "default"

第三步:添加bootstrap配置

spring:
  application:
    name: item-service # 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168.200.128:8848 # nacos地址
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置
          - dataId: shared-seata.yaml # 共享seata配置

第四步:简化原本配置

image-20240727164859001

server:
  port: 8081
feign:
  okhttp:
    enabled: true # 开启OKHttp连接池支持
  sentinel:
    enabled: true # 开启Feign对Sentinel的整合
hm:
  swagger:
    title: "商品服务接口文档"
    package: com.hmall.item.controller
  db:
    database: hm-item

XA模式

image-20240727170716244

  • 实现全局事务的关键就是等待,事务等待不提交,所有事务都执行好了再一起提交

image-20240727171026099

实现XA模式

image-20240727171047354

  • 具体实现可以看官方文档 https://b11et3un53m.feishu.cn/wiki/QfVrw3sZvihmnPkmALYcUHIDnff

AT模式

  • at模式是默认的,使用的多

image-20240727171654570

  • AT和XA模式在这部分前面的逻辑是完全一致的

image-20240727171942815

  • 可能会出现短暂的数据不一致问题。

image-20240727172034820

At模式具体实现

第一步:导入log数据表

image-20240727172137192

第二步:修改配置 改成使用at模式

image-20240727172410786

JDK11使用反射时候报错java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.lang.Class java.lang.invoke.SerializedLambda.capturingClass accessible: module java.base does not “opens java.lang.invoke” to unnamed module @4c583ecf [in thread “http-nio-8084-exec-1”]

--add-opens java.base/java.lang.invoke=ALL-UNNAMED 
  • 虚拟机选项中添加以上代码即可

image-20240727220628025

作业

作业一:3.1.编写降级逻辑

解题思路

  • 首先明白题目要让我们做什么?

  • 编写降级逻辑,就是写sentinel中的fallback

  • 明白了要做什么之后,来想怎么做:fallback是Sentinel中的一个东西,因此想要编写fallback,就得想将Sentinel引入进来,在Sentinel中的控制台能够看到要编写fallback逻辑的模块

开始解题

第一步:启动Sentinel

image-20240727215915066

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
  • 输入以上命令打开sentinel

image-20240727220030194

一开始你可能看不到你之前配置的东西

image-20240727220846056

  • 点开商城,进行几次查询,加购等操作,就可以看到了

image-20240728085215036

第二步:给相应模块添加 Sentinel

添加依赖

image-20240728085352559

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

添加配置

image-20240728085702645

  • 重启服务,发现多了这个

image-20240728085730141

fallback的处理逻辑
第一步:添加fallback逻辑

image-20240728090059332

  • 前面已经对商品做了fallback的处理,这次我们给cart-service进行添加fallback逻辑处理

image-20240728092002202

package com.hmall.api.client.fallback;

import com.hmall.api.client.CartClient;
import com.hmall.common.exception.BizIllegalException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;

import java.util.Collection;

@Slf4j
public class CartClientFallback implements FallbackFactory<CartClient> {
    @Override
    public CartClient create(Throwable cause) {
        return new CartClient(){

            @Override
            public void deleteCartItemByIds(Collection<Long> ids) {
                log.error("远程调用CartClientt#deleteCartItemByIds方法出现异常,参数:{}", ids, cause);
                // 批量删除失败,进行事务回滚111
                throw new BizIllegalException(cause);
            }
        };
    }
}

第二步:注册bean

image-20240728091412591

第三步:使用相应bean

image-20240728091543143

  • 现在你就可以打开测试啦,不过因为这是删除,所以建议使用别的进行测试。其他的配置方法也是一样的

作业二:3.2.解决分布式事务

作业描述

除了下单业务以外,用户如果选择余额支付,前端会将请求发送到pay-service模块。而这个模块要做三件事情:

  • 直接从user-service模块调用接口,扣除余额付款
  • 更新本地(pay-service)交易流水表状态
  • 通知交易服务(trade-service)更新其中的业务订单状态
  • 这里其实也很简单,在需要的模块加上相关注解、引入依赖就可以了

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

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

相关文章

树莓派_Opencv学习笔记23:模版样本匹配

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Opencv 版本是4.5.1&#xff1a; ​ Python 版本3.7.3&#xff1a; 今日学习Opencv样本…

香烟商品销售网站

1 香烟商品销售网站概述 1.1 课题简介 1.2 设计目的 1.3 系统开发所采用的技术 1.4 系统功能模块 2 数据库设计 2.1 建立的数据库名称 2.2 所使用的表 3 香烟商品销售网站设计与实现 1. 注册登录&#xff1a; 2. 分页查询&#xff1a; 3. 分页条件&#xff08;精确、…

速卖通卖家如何利用自养号测评,让店铺曝光量飙升?

在速卖通这个竞争激烈的跨境电商平台上&#xff0c;店铺曝光率是决定销售成败的关键因素之一。为了在众多商家中脱颖而出&#xff0c;增加速卖通店铺曝光显得尤为重要。速卖通怎么增加店铺曝光&#xff1f; 速卖通怎么增加店铺曝光? 1、优化产品列表 速卖通的产品列表是买家…

数据库实验:连接查询

一、实验目的&#xff1a; 1、掌握使用两种写法完成连接查询&#xff1a;叉积连接语法和内连接语法。 2、掌握使用外连接语法完成查询。 3、掌握使用派生表完成下列查询。 二、实验内容&#xff1a; 1. 使用连接实现查询&#xff0c;查询订单号为‘000005’的订单订购的玩具…

windows 安装docker桌面版

下载 下载两个&#xff1a; git桌面版 docker desktop 启动docker 执行安装文件&#xff0c;启动 更新wsl2 假如报错&#xff0c;会提示失败原因。 win10会提示跳转到&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-l…

CANoe编程实例--TCP/IP通信

1、简介 本实例将使用目前常用的开发工具C#来开发服务器端&#xff0c;以CANoe端作为客户端。服务器端和客户端&#xff0c;通过TCP/IP连接&#xff0c;实现数据交换。 首先在服务器端建立一个监听Socket&#xff0c;自动创建一个监听线程&#xff0c;随时监听是否有客户端的连…

使用 Visual Studio 2022 自带的 cl.exe 编译 tensorRT自带测试样例 sampleOnnxMNIST

1. 新建任意文件夹&#xff0c;将 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sampleOnnxMNIST.cpp 文件复制进来&#xff0c;同时 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sample_onnx_mnist.vcxproj 中的内容&…

WEBKIT 通过JavaScript 调用本地,硬件未来之窗OS硬件APP

以酒店为例我们需要调用shen份证读取&#xff0c;采集人脸&#xff0c;门锁写房卡&#xff0c;如何通过浏览器调用 1.通过本地http服务 2.通过webkit模式 这里说政务单位模式的集成 由于篇幅问题&#xff0c;怎么集成webkit就不说了 一、webkkit加载交互本地代码 browser.…

【Kettle实现神通(数据库)MPP增量、全量数据ETL,同步任务Linux运行(通用)】

1、背景介绍 具体Kettle操作步骤不做过多介绍&#xff0c;主要技术方案说明&#xff0c;Kettle8.2版本放在底部链接提取&#xff0c;本次采用Kettle实现源端&#xff1a;神通数据通用库、目标端&#xff1a;神通MPP增量数据同步&#xff0c;并在服务器端运行Job。 2、windows…

Materials Today|用于婴儿监护的柔性电子设备 (柔性健康监测/柔性传感/可穿戴电子/电子皮肤/柔性电子)

西安交通大学方云生&#xff08;Yunsheng Fang&#xff09;、徐峰&#xff08;Feng Xu&#xff09;和西安交通大学第一附属医院林婷&#xff08;Ting Lin&#xff09;团队&#xff0c;在期刊《Materials Today》上发布了一篇题为“Soft electronics for advanced infant monito…

关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)

注&#xff1a;另一种方式参考 关于TableField中TypeHandler属性&#xff0c;自定义的类型处理器的使用&#xff08;密码加密与解密举例&#xff09;http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前&#xff0c;我们可以先了解一下什么是序列化与反序列…

JAVA里的配置文件(Properties)详解

package Properties;import java.util.Map; import java.util.Properties; import java.util.Set;public class demo1 {public static void main(String[] args) {/*Properties作为Map集合的操作*///1.创建集合的对象Properties pnew Properties();//2.添加数据//细节&#xff…

谷粒商城实战笔记-79-商品服务-API-平台属性-销售属性维护

文章目录 一&#xff0c;列表接口开发1&#xff0c;新建常量类2&#xff0c;路径参数识别规格参数和销售属性 二&#xff0c;其他接口三&#xff0c;编码经验-使用常量类为什么要用常量类&#xff1f;示例 这一节的主要内容是&#xff1a; 销售属性列表查询接口的开发将代码中的…

C++ 沙漏图案(Hour-glass Pattern)

给定正整数 n&#xff0c;以沙漏形式打印数字模式。示例&#xff1a; 输入&#xff1a;rows_no 7 输出&#xff1a; 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6…

等保2.0测评 — 容器测评对象选取

之前有小伙伴提问到&#xff0c;关于容器到底要测评哪些内容&#xff0c;也就是测评对象的选取。 首先要区分的是容器与容器集群这两个概念。容器集群概念可参考该篇文章。 不使用容器扩展要求情况 当仅使用容器技术时&#xff0c;采用安全通用要求&#xff0c;无需使用容器…

AFSim仿真系统-架构概览

引言 本文档从最终用户的角度描述了AFSIM架构&#xff0c;旨在帮助最终用户深入了解AFSIM的操作概念。 核心架构 AFSIM基于面向对象的C架构&#xff0c;提供了一种可扩展和模块化的架构&#xff0c;使得许多附加功能能够轻松集成。AFSIM允许新的组件模型&#xff08;如传感器、…

2019数字经济公测大赛-VMware逃逸

文章目录 环境搭建漏洞点exp 环境搭建 ubuntu :18.04.01vmware: VMware-Workstation-Full-15.5.0-14665864.x86_64.bundle 这里环境搭不成功。。patch过后就报错&#xff0c;不知道咋搞 发现可能是IDA加载后的patch似乎不行对原来的patch可能有影响&#xff0c;重新下了patch&…

LiteFlow条件组件的设计组件标签|组件参数,EL与或非表达式正反解析,元数据管理

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 参考 https://juejin.cn/post/7005869798483558431 &#x1f349;组件参数 | LiteFlow &#x1f34…

黑龙江等保测评如何做到既全面又高效?

在黑龙江省进行等保测评&#xff0c;必须在全面和高效之间寻求一个平衡点&#xff0c;以保证网络的安全性和可靠性。黑龙江等保测评怎样才能在二者之间发现黄金交汇点&#xff1f;下面&#xff0c;我们来揭开谜底。 精准定位&#xff0c;明确测评范围 首先&#xff0c;一个综…

LLaMA Factory添加新模型template的实战解析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…