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

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

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

gitee https://gitee.com/Qiuner 🌹

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

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

  • 这篇中规中举,有不少bug记录与方便您复制的代码,相信一定能节省学习时间同时达到更好的效果
  • 本博客要与原文档搭配使用 day03-微服务01 - 飞书云文档 (feishu.cn)
  • 本来这个系列博客应该五月份出完,但有各种事情。所幸都安然度过 也不敢再标题写全网最快了 只写全网最全 😎

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

win 11 VMware workstations b不可恢复的错误(vcpu-2)

image-20240616085118733

  • 找一个新版的VM进行下载这个问题就能解决,博主之前是

image-20240519171509675

  • 这里按照视频及文档操作即可 ‌‍‬‬‌⁠‌‌‍‍‌‍‌‌⁠⁠‬‍‍‍day03-微服务01 - 飞书云文档 (feishu.cn)
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

  • 官方文档的这个是错的,写错了一部分的内容

CentOS7显示异常 显示为bash-4.2#

image-20240522155232377

  • 输入一行
source /root/.bashrc
  • 就能实现命令符的变化

数据库连接异常处理

  • 在这里 可能会看见以下报错
  • 注意 您可在这一步前确认自己的mysql服务是否已启动(是否能连上本地的数据库)

image-20240527150206696

解决方式

  • 先看能不能ping通

image-20240527150246477

  • 如果能ping通而连接不了,那可能是docker服务没有启动
  • 先查看全部容器,然后使用docker start mysql即可

image-20240527150335300

image-20240527150350988

image-20240527150451273

  • 再次连接发现成功连接上

项目实际生产环境与使用环境的不同设计

在这里插入图片描述

image-20240527164456736

  • 通过这种方式就可以设置启动项目的方式

image-20240526153728832

  • 一个未登入导致权限不足的bug,这个是正常的

image-20240526153823535

  • 这里老师使用黑框框启动 但其实可以不用 点击也行 以下命令会关闭所有的nginx进程
 taskkill /f /t /im nginx.exe

image-20240527164953709

用户登录报错

image-20240527165645092

  • 将JDK改为11即可

image-20240527165940809

image-20240527165944066

单体架构认识

image-20240527172132665

项目中使用到的jmeter

  • 这里要用到jmeter进行测试 推荐看博主的另一篇文章

软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具-CSDN博客

  • 如果不想看 那我简单地做个介绍

image-20240527171311801

image-20240527172358434

image-20240527172808918

image-20240527203643564

image-20240527203659497

  • https://spring.io/projects/spring-cloud 这是SpringCloud的官网 可以在这里看到很多组件

image-20240527205027094

  • P40这里做的非常好 从一个商城项目的视角来切入项目 教你怎么读别人的代码

image-20240527214256281

微服务拆分原则

image-20240527214515089

image-20240527214723279

image-20240527215105138

拆分案例 拆分商品服务

下面是修改的配置文件

  • 作者名我改成了Qiuner,你可以改成你自己喜欢的名称
server:
  port: 8081
spring:
  application:
    name: item-service
  profiles:
    active: dev
  datasource:
    url: jdbc:mysql://${hm.db.host}:3306/hm-item?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: ${hm.db.pw}
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto
logging:
  level:
    com.hmall: debug
  pattern:
    dateformat: HH:mm:ss:SSS
  file:
    path: "logs/${spring.application.name}"
knife4j:
  enable: true
  openapi:
    title: 黑马商城商品管理接口文档
    description: "黑马商城商品管理接口文档"
    email: zhanghuyi@itcast.cn
    concat: Qiuner
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - com.hmall.item.controller
  • 这里的拷贝案例直接看视频吧,用文字表达出来比较长
  • 微服务01-08.微服务拆分-拆分商品服务_哔哩哔哩_bilibili
    • 视频里的 服务拆分思路我认为是值得学习的,先复制domain层的东西(vo、dto)什么的
      • 然后复制mapper、Service、control

image-20240531113247112

  • 这里服务配置完后就可以运行了 运行起来时记得访问下8081(拆分出来的子模块)端口号后面加上/doc.html 来访问接口文档

在微服务项目中新建一个模块时 你需要做些什么

启动类方面

image-20240529105836498

image-20240529110112340

  • 修改成这样 那么启动类就配置完毕了

配置文件方面

image-20240529215203289

  • 这里配置文件可以看我的另一篇文章: 微服务配置文件详解 对配置文件做了个大致的介绍,通俗易懂(还没写 之后写了会放链接的

拆分案例 拆分购物车服务 与IDEA自动导包设置

  • 和之前一样的 就是视频中的idea配置了自动导入包
  • 可以尝试自己进行服务拆分

image-20240531204445263

  • 如果此处运行起来报 500 的错 先检查自己docker服务有没有启动起来 然后看自己是不是写hm-cart 像博主就写card了

远程调用

image-20240531205451245

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
   private void handleCartItems(List<CartVO> vos) {
        // TODO 1.获取商品id
        Set<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());
        // 2.查询商品 原代码
        // List<ItemDTO> items = itemService.queryItemByIds(itemIds);
        // 这里查询商品不再从本地数据库中查询 而是发送请求 让远程服务器接受来查询
        
        // 使用RestTemplate发送请求

        ResponseEntity<List<ItemDTO>> response= restTemplate.exchange(
                "http://localhost:8081/items?ids={ids}",
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<List<ItemDTO>>() {
                },
                Map.of("ids",CollUtils.join(itemIds,","))
        );

        // 解析响应
        if (!response.getStatusCode().is2xxSuccessful()){
            // 查询失败
            return;
        }
        //这里做转换
        List<ItemDTO> items =response.getBody();

        if (CollUtils.isEmpty(items)) {
            return;
        }
        // 3.转为 id 到 item的map
        Map<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));
        // 4.写入vo
        for (CartVO v : vos) {
            ItemDTO item = itemMap.get(v.getItemId());
            if (item == null) {
                continue;
            }
            v.setNewPrice(item.getPrice());
            v.setStatus(item.getStatus());
            v.setStock(item.getStock());
        }
    } 

image-20240531220357395

  • 要点就是看服务有没有启动、使用了什么配置文件的数据库进行运行

Spring不推荐使用@Autowired注解

image-20240617085722366

  • 这里有很多原因,比如依赖注入顺序,使用构造函数能保证在对象创建时已经被注入,而使用字段注入未必
  • 还有对象不可变性、依赖倒装原则,减少反射等等

image-20240617090409482

  • 使用构造函数会出现成员变量很多构造函数需要写很多的情况
  • 使用RequiredArgsConstructor 注解 加上 final来进行保证初始化

image-20240601102250438

Nacos注册中心

image-20240601102426342

  • 面临可以有多台服务器提供服务,这个时候服务地址不知道要填什么。填一个定死,出故障了那整个业务就崩溃了

image-20240601102757726

image-20240617095131369

  • 图中 当 8083没有进行心跳续约的时候,注册中心就会剔除掉
  • 原本有三个服务提供者,8081,8082,8083

image-20240601102842793

报错NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [containerd:1062]

  • 看看你虚拟机分配的配置是不是不够,博主就是虚拟机配置不够,然后跑不起来(老师弄得8G是够的,博主没开那么大而已)

http://192.168.197.130:8848/nacos

  • 将项目ip地址换成你自己的

image-20240617100622205

  • 看到这个页面就是部署成功了

服务注册

image-20240617101840194

image-20240617102415860

  • 这里的discoveryClient是一个顶级接口,所有的服务注册中心都实现了这个接口

  • instances.get这里是选择负载均衡算法

依赖导入报错问题 [ERROR] ‘dependencies.dependency.groupId’ for com.heima’:hm-service:jar with value ‘com.heima’’ does not match a valid id pattern. @ line 33, column 22

image-20240617162204418

  • 解决方案很简单,这是没有在本地找到项目依赖,将要关联的弄到本地就可以了
  • image-20240617162301444

image-20240617162359758

  • 运行 成功解决
 mvn clean install

OpenFeign

image-20240617111401551

image-20240617111449451

  • 原本想要在两个服务中调取请求需要做上面这么多事

image-20240617111822191

image-20240617143823185

  • 现在只需要这几行代码

OpenFeign引入四步走

第一步:在pom文件中新增这些东西

        <!--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>

第二步:添加开关

image-20240617112354917

第三步:写客户端与实际代码

image-20240617112652887

第四步:使用

image-20240617113037384

OpenFeign优化

  • 原本没有连接池 现在使用链接池,毫无疑问,使用链接池对性能的优化是巨大的

image-20240617144736688

image-20240617144804715

day03-微服务01 - 飞书云文档 (feishu.cn)

OpenFeign使用优化

优化方式一:

image-20240617152648526

优化方式二:

image-20240617152759279

image-20240617152252831

  • 需要在启动类的@Endble注解上加上扫描地址

OpenFeign日志

image-20240617153239213

image-20240617153429116

第一步:写一个返回日志级别方法

image-20240617153814867

第二步:使用这个日志级别

image-20240617154033462

image-20240617154317887

  • 上面标志表示 成功了

image-20240617154237811

  • 剩下作业有教程的 就不写了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DoIP——step1:车辆连接

文章目录 前言一、连接要求DoIP边缘节点的接口要求/测试仪的接口要求DoIP边缘节点物理层要求DoIP边缘节点数据链路层要求测试设备数据链路层要求二、物理连接激活线三、线束要求前言 采用DoIP对车辆进行诊断时可选择有线或者无线的方式完成外部诊断设备和车辆的连接,接下来将…

文档项目:攻坚克难

鉴于交流离心机存在的缺点&#xff1a;转速相对偏差、稳定精度不够高&#xff1b;带负载能力受外界扰动后&#xff0c;波动较大&#xff1b;寿命短&#xff0c;研究所各相关部门成立组成技术攻关团队&#xff0c;齐心协力&#xff0c;攻坚克难&#xff0c;在摸索中突破创新&…

【实用工具】Skyworking

文章目录 一、Skywalking概述1.1 核心功能1.2 指标概述1.2.1 一些常用指标1.2.2 指标的使用方式 二、仪表盘2.1 APM2.1.1 全局维度的指标2.1.2 服务维度的指标2.1.3 实例维度的指标2.1.4 端点维度的指标 2.2 数据库2.3 其他 三、追踪3.1 界面划分3.2 请求链路界面分析3.3 一般流…

Unity 材质系统优化(mesh相同,图片不同,但是可以将所有的图片合成一张图集)

今天提供一个Unity材质优化的思路&#xff0c;流程是这样的&#xff0c;模型的mesh相同只是图片不同&#xff0c;我想着能不能将所有的图片合成一张图集呢&#xff0c;于是我就试着在Blender里面开搞了&#xff0c;所有的mesh相同的模型&#xff0c;共用一个材质&#xff08;图…

spring整合openAI大模型之Spring AI

文章目录 一、SpringAI简介1.什么是SpringAI2.SpringAI支持的大模型类型&#xff08;1&#xff09;聊天模型&#xff08;2&#xff09;文本到图像模型&#xff08;3&#xff09;转录&#xff08;音频到文本&#xff09;模型&#xff08;4&#xff09;嵌入模型&#xff08;5&…

广电行业没落了吗?生成式人工智能(AIGC)媒体应用标准联盟发布,超清化、移动化和智能化是发展趋势

这些年&#xff0c;随着智能手机、网络普及程度越来越高&#xff0c;传统广播电视的打开率下滑&#xff0c;广电行业甚至被纳入“特困”行业名单。 根据2022年5月31日&#xff0c;人社部等四部门发布的《关于扩大阶段性缓缴社会保险费政策实施范围等问题的通知》&#xff0c;其…

高频谐振功放

目录 基本电路原理 高频谐振功放vs.高频谐振小放 高频谐振功放vs.低频功放 功率与效率 计算 基本电路原理 由于加了VBB&#xff0c;基极反偏&#xff0c;拉低了输入信号的直流偏量&#xff08;如下图中-VBB&#xff09;,加上三极管截至电压VBE的存在&#xff0c;只有一部分…

Web后端开发的学习

REST风格 GET:查询用户POST:新增用户POT:修改用户DELETE:删除用户 前后端交互统一的响应结果 记录日志 SLf4j 注解&#xff1a; PathVariable&#xff1a;获取路径的参数ResponseBody :方法的返回值直接作为 HTTP 响应的正文返回,将响应的实体类转为json发送给前端Request…

WPF学习(4)--SCICHART学习

一、项目创建过程 1.下载SCICHART插件 2.选中第一个&#xff0c;确保引用中有我们要用的 二、示例代码 1.前端代码 <Window x:Class"SciChart.Examples.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"h…

LSS算法核心原理详细解读,一看就懂,不懂请打我!

目录 核心整体流程分步阐述backbone几何关系&#xff08;创建视锥&#xff09;和视锥投影到egoVoxel PoolingHead 总结 核心 将2D图像特征转换到BEV feature特征 该算法是BEV领域中的一大基石 整体流程 流程步骤 &#xff08;1&#xff09;利用backbone获得环视图像&#xf…

配置文件-基础配置,applicationproperties.yml

黑马程序员Spring Boot2 文章目录 1、属性配置2、配置文件分类3、yaml文件4、yaml数据读取4.1 读取单个数据4.2 读取全部属性数据4.3 读取引用类型属性数据 1、属性配置 SpringBoot默认配置文件application.properties&#xff0c;通过键值对配置对应属性修改配置 修改服务器端…

Day 25:1807. 替换字符串中的括号内容

Leetcode 1807. 替换字符串中的括号内容 给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道…

IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照(snapshot)JAR 包

IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照&#xff08;snapshot&#xff09;JAR 包 目录 IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照&#xff08;snapshot&#xff09;JAR 包1. 检查 settings.xml2. IDEA Maven 配置3. 强制更新 Snapshot4. 使用…

「51媒体-年中大促」天津有哪些媒体资源-媒体宣传服务公司

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 天津的媒体资源相当丰富&#xff0c;涵盖了报纸、电视、广播、新闻门户网站、央媒驻天津机构、视频媒体以及全国媒体资源等多个方面。以下是详细的媒体资源分类和具体信息&#xff1a; 一…

艾伦脑图谱(Allen Brain Atlas)

文章目录 一、艾伦研究所&#xff08;Allen Institute&#xff09;1.1、艾伦脑图谱&#xff08;Allen Brain Map&#xff09;1.1.1、艾伦&#xff08;小鼠大脑&#xff09;通用坐标框架&#xff08;Allen Mouse Brain Common Coordinate Framework&#xff0c;CCFv3&#xff09…

基于single flight来解决缓存击穿

目录 1. 缓存击穿2. 常见解决方案3.single flight方式3.1 模拟业务场景3.2 使用single flight的方式 缓存雪崩、缓存击穿、缓存穿透不单单是缓存领域的经典场景&#xff0c;更是面试当牛马时必备&#xff08;背&#xff09;八股文。 我们来讨论下缓存击穿场景下的解决方案。 …

Linux网络编程:epoll

1.IO多路转接---epoll 1.1.接口认识 epoll多路转接的实现是基于三个系统调用的&#xff0c;而这些系统调用底层是epoll模型的构建&#xff0c;和设置的结构体、数据结构之间的交互&#xff0c;我们需要一步步地进行epoll的学习&#xff01; epoll_create( ) 如图&#xff1a;…

从短期到长期,不同保存期限的红酒管理技巧

在葡萄酒的世界中&#xff0c;保存与管理的技巧对于确保葡萄酒的品质和口感至关重要。特别是对于云仓酒庄雷盛红酒&#xff0c;这种多类型红酒&#xff0c;更需要我们掌握一定的保存管理技巧。这篇文章将详细探讨从短期到长期&#xff0c;不同保存期限的云仓酒庄雷盛红酒的管理…

如何高效使用大型语言模型 LLMs 初学者版本 简单易上手

第一条也是最重要的一条规则是 永远不要要求LLM提供你无法自己验证的信息, 或让它完成你无法验证其正确性的任务。 唯一例外的情况是那些无关紧要的任务&#xff0c; 例如&#xff0c;让大型语言模型提供公寓装修灵感之类的是可以的 。 首先请看两个范例 不佳示范&#xff1a…

上海交通大学、中科大 开源镜像站停止 Docker Hub 仓库镜像支持后的可用替代源

上海交通大学 Linux 用户组发布公告&#xff1a; 即时起中止对 Docker Hub 仓库的镜像。Docker 相关工具默认会自动处理失效镜像的回退&#xff0c;如果对官方源有访问困难问题&#xff0c;建议尝试使用其他仍在服务的镜像源。 源加速地址 有网友表示百度的 Docker Hub 加速器…