黑马程序员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-serviceprofiles:active: devdatasource:url: jdbc:mysql://${hm.db.host}:3306/hm-item?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ${hm.db.pw}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto
logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"
knife4j:enable: trueopenapi:title: 黑马商城商品管理接口文档description: "黑马商城商品管理接口文档"email: zhanghuyi@itcast.cnconcat: Qiunerurl: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-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

    @Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
   private void handleCartItems(List<CartVO> vos) {// TODO 1.获取商品idSet<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的mapMap<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));// 4.写入vofor (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

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

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

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

相关文章

什么是AIGC——AIGC的全面讲解

目录 什么是AIGC 普通用户接触AIGC网站推荐 通义千问 白马 普通用户如何用好AIGC 关键提示词的作用 AIGC的影响 就业市场&#xff1a; 教育领域&#xff1a; 创意产业&#xff1a; 经济活动&#xff1a; 社交媒体与信息传播&#xff1a; AIGC面临的挑战 什么是AIGC…

linux的repo工具的入门

repo 是一个工具&#xff0c;用于管理 Git 仓库的集合&#xff0c;尤其在 Android 开发中被广泛使用。它是 Google 为 Android 项目开发的&#xff0c;以简化对大量 Git 仓库的管理。 主要特点 多仓库管理&#xff1a;repo 允许同时管理多个 Git 仓库&#xff0c;可以轻松执行…

Ubuntu20.04中复现FoundationPose

Ubuntu20.04中复现FoundationPose 文章目录 Ubuntu20.04中复现FoundationPose1.安装cuda和cudnn2.下载相关资源3.环境配置4.运行model-based demo5.运行ycbv demoReference &#x1f680; 非常重要的环境配置 &#x1f680; ubuntu 20.04cuda 11.8.0cudnn v8.9.7python 3.9.19…

HTTP/2 协议学习

HTTP/2 协议介绍 ​ HTTP/2 &#xff08;原名HTTP/2.0&#xff09;即超文本传输协议 2.0&#xff0c;是下一代HTTP协议。是由互联网工程任务组&#xff08;IETF&#xff09;的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。…

51单片机宏定义的例子

代码 demo.c #include "hardware.h"void delay() {volatile unsigned int n;for(n 0; n < 50000; n); }int main(void) {IO_init();while(1){PINSET(LED);delay();PINCLR(LED);delay();}return 0; }cfg.h #ifndef _CFG_H_ #define _CFG_H_// #define F_CPU …

MySQL的卸载

先停止对应MySQL服务&#xff0c;然后再进行删除&#xff08;进入MySQL安装目录bin目录内以管理员身份打开命令行&#xff09; 停止服务 net stop Mysql&#xff08;服务名&#xff09; ——MySQL&#xff08;服务名&#xff09;安装时是什么名字就写什么名字 卸载 mysqld …

Gitlab SSH无法连接但是HTTP可以连接

项目场景&#xff1a; Gitlab在docker中布置好之后测试&#xff0c;发现SSH无法连接但是HTTP可以连接 提示&#xff1a;这是一个无效的源路径 问题描述 http可以识别为git项目&#xff0c;而ssh无法识别成git项目。 原因分析&#xff1a; 三种猜想 端口号被占用 尝试查看…

Centos7 安装oracle 11.2.0.4

荆轲刺秦王 1. 准备工作 需要下载 Oracle 11g 安装包 2.HostName修改&#xff1a; hostnamectl set-hostname oracle 3. 配置hostname&#xff08;本机IP映射&#xff09;注意&#xff1a;192.168.116.129 需要换乘本地ip vi /etc/hosts 192.168.116.129 oracle # 测试hos…

服务端渲染和客户端渲染,你真的了解吗?一文全解

网页渲染有两种常见的模式&#xff1a;服务端渲染&#xff08;SSR&#xff09;和客户端渲染&#xff08;CSR&#xff09;&#xff0c;这两种模式的概念、区分、优劣势、应用场景、对应的js库等等&#xff0c;你都门清吗&#xff1f;贝格前端工场带你详细了解。 一、SSR和CSR …

QT中首次添加图片资源,及新增图片资源

文章目录 简介首次添加再次新增 简介 记录一下在qt中新增图片资源遇到的问题 首次添加 再次新增 images文件夹中需要先存在这些图片 运行之后没效果&#xff0c;检查好几遍&#xff0c;最终发现需要清除项目后重新构建。 从网上的一句话来的灵感&#xff1a;

深入探讨JavaScript的执行机制

预编译 首先下面这段代码的执行是一个怎样的结果呢&#xff1f; showName(); console.log(MyName);var MyName 小陈同学function showName() {console.log(函数showName被执行); }在这段代码中我们声明了一个变量MyName和一个函数showName&#xff0c;调用函数&#xff0c;打…

【Nvidia+AI车载摄像头】超小尺寸300万像素车载环视摄像头方案

作为一家致力于成像和视觉技术的科技创新公司&#xff0c;于近日推出了基于安森美300万像素AR0341AT图像传感器的超小尺寸车载环视摄像头模组&#xff0c;可助力提高驾驶的安全指标&#xff0c;有效解决高速自动驾驶对卓越的HDR性能和图像质量的需求&#xff0c;并降低系统开发…

Linux:生产消费模型 读者写者模型

Linux&#xff1a;生产消费模型 & 读者写者模型 生产消费模型阻塞队列基本结构构造与析构投放任务获取任务总代码 POSIX 信号量基本概念接口 环形队列基本结构构造与析构投放任务获取任务总代码 读者写者模型读写锁 生产消费模型 生产消费模型是一种用于处理多线程之间任务…

教育培训系统(FastAdmin+ThinkPHP+Unipp)

引领学习新风尚 &#x1f4da; 引言&#xff1a;教育新篇章 随着科技的不断发展&#xff0c;教育形式也在不断创新与变革。教育培训系统作为这一变革的重要载体&#xff0c;正逐渐改变着我们的学习方式。今天&#xff0c;就让我们一起探索教育培训系统的魅力&#xff0c;看看它…

Java基础16(集合 List)

目录 一、什么是集合&#xff1f; 二、集合接口 三、List集合 1. ArrayList容器类 1.1 常用方法 1.1.1 增加 1.1.2 查找 int size() E get(int index) int indexOf(Object c) boolean contains(Object c) boolean isEmpty() List SubList(int fromindex,i…

再谈章子怡哽咽致谢张艺谋:你知道最走心的感谢是什么吗?

再谈章子怡哽咽致谢张艺谋&#xff1a;你知道最走心的感谢是什么吗&#xff1f; 在上一篇文章中&#xff0c;#李秘书讲写作#谈了近日#章子怡哽咽致谢张艺谋#这个话题&#xff0c;并指出一般人在什么情况下会主动感谢别人&#xff1f;这一节我们就讲最走心的感谢是什么&#xf…

深度学习原理

1 简介 AIGC&#xff08;Artificial Intelligence Generated Content&#xff0c;即人工智能生成内容&#xff09;是一种利用人工智能技术自动创建文本、图像、音频和视频等内容的技术。AIGC的核心是通过机器学习和深度学习算法&#xff0c;让计算机模型学会理解和生成人类语言…

前端锚点 点击 滑动双向绑定

一. 页面样式 二. 代码 <div class"flexBox"><div class"mdDiv" v-for"(item,index) in tabList" :key"index" :class"nowChooseindex?choosed:" click"jumpMD(index, item.id)">{{item.name}}&l…

TrueNAS系统在ARM平台上的移植

随着家庭及中小型企业对存储和共享需求的日益增长&#xff0c;高效、可靠的文件存储系统成为支撑各类应用的关键。 在众多存储系统中&#xff0c;TrueNAS以其卓越的数据完整性与可靠性、简洁高效的应用程序部署和管理、灵活的虚拟化应用添加能力&#xff0c;以及出色的可用性&a…

scrapy模块的基础使用

scrapy模块是爬虫工作者最常用的一个模块之一&#xff0c;因它有许多好用的模板&#xff0c;和丰富的中间件&#xff0c;深受欢迎。 一&#xff0c;scrapy的安装 可以通过pypi的指引进行安装 在终端内输入以下代码&#xff1a; pip install scrapy 二&#xff0c;项目的建…