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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1)

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

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

gitee https://gitee.com/Qiuner 🌹

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

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

  • 这篇中规中举,有不少bug记录与方便您复制的代码,相信一定能节省学习时间同时达到更好的效果
  • 本博客要与原文档搭配使用 day03-微服务01 - 飞书云文档 (feishu.cn)
  • 本来这个系列博客应该五月份出完,但有各种事情。所幸都安然度过 也不敢再标题写全网最快了 只写全网最全 😎
    本篇文章的重点是 作业 trade客户端拆分思路 我比老师讲的更详细 看完不会找我 就是这么自信 😎

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

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

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

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#

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

数据库连接异常处理

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

解决方式

  • 先看能不能ping通

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

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

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

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

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

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

用户登录报错

  • 将JDK改为11即可

单体架构认识

项目中使用到的jmeter

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

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

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

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

微服务拆分原则

拆分案例 拆分商品服务

下面是修改的配置文件

  • 作者名我改成了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
  • 视频里的 服务拆分思路我认为是值得学习的,先复制domain层的东西(vo、dto)什么的
  • 然后复制mapper、Service、control

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

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

启动类方面

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

配置文件方面

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

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

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

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

远程调用

@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());
        }
    } 

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

Spring不推荐使用@Autowired注解

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

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

Nacos注册中心

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

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

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

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

http://192.168.197.130:8848/nacos

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

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


黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(2):https://developer.aliyun.com/article/1548646

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
99 5
|
3月前
|
存储 NoSQL API
微服务——MongoDB实战演练——需求分析
本文档《5-MongoDB实战演练》聚焦于某头条文章评论业务的需求分析与功能实现。基于MongoDB,需完成以下功能:1)提供基本的增删改查API;2)支持通过文章ID查询相关评论;3)实现评论点赞功能。结合实际业务场景,演示MongoDB在数据存储与操作中的应用,附带示意图帮助理解业务结构。
42 2
微服务——MongoDB实战演练——需求分析
|
3月前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章评论的基本增删改查
本节介绍了文章评论的基本增删改查功能实现。首先,在`cn.itcast.article.dao`包下创建数据访问接口`CommentRepository`,继承`MongoRepository`以支持MongoDB操作。接着,在`cn.itcast.article.service`包下创建业务逻辑类`CommentService`,通过注入`CommentRepository`实现保存、更新、删除及查询评论的功能。最后,新建Junit测试类`CommentServiceTest`,对保存和查询功能进行测试,并展示测试结果截图,验证功能的正确性。
66 2
|
3月前
|
NoSQL Java MongoDB
微服务——MongoDB实战演练——文章评论实体类的编写
本节主要介绍文章评论实体类的编写,创建了包`cn.itcast.article.po`用于存放实体类。具体实现中,`Comment`类通过`@Document`注解映射到MongoDB的`comment`集合,包含主键、内容、发布时间、用户ID、昵称等属性,并通过`@Indexed`和`@CompoundIndex`注解添加单字段及复合索引,以提升查询效率。同时提供了Mongo命令示例,便于理解和操作。
64 2
|
2月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
3月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——MongoTemplate实现评论点赞
本节介绍如何使用MongoTemplate实现评论点赞功能。传统方法通过查询整个文档并更新所有字段,效率较低。为优化性能,采用MongoTemplate对特定字段直接操作。代码中展示了如何利用`Query`和`Update`对象构建更新逻辑,通过`update.inc(&quot;likenum&quot;)`实现点赞数递增。测试用例验证了功能的正确性,确保点赞数成功加1。
68 0
|
3月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
52 0
|
3月前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章微服务模块搭建
本节介绍文章微服务模块的搭建过程,主要包括以下步骤:(1)创建项目工程 *article*,并在 *pom.xml* 中引入依赖;(2)配置 *application.yml* 文件;(3)创建启动类 *cn.itcast.article.ArticleApplication*;(4)启动项目,确保控制台无错误提示。通过以上步骤,完成文章微服务模块的基础构建与验证。
47 0
|
18天前
|
人工智能 数据可视化 JavaScript
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
Juggle是国内首个开源的微服务编排框架,专注于解决企业微服务进程中接口重复开发、系统对接复杂等问题。它提供零代码、低代码和AI增强功能,通过可视化拖拽快速组装简单API为复杂接口,支持多协议、多语言脚本和流程多版本管理。相比国外框架如Conductor,Juggle更贴合国内需求,具备高效开发、企业级可靠性及信创适配等优势,助力企业实现敏捷创新与数字化转型。
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
|
3月前
|
NoSQL MongoDB 数据库
微服务——MongoDB实战演练——表结构分析
本文档来源于数据库articledb,展示了一张图片资源。图片宽度为1207像素,高度607像素,采用内联显示方式。内容涉及图像处理与样式设定,适用于文档或网页设计中多媒体元素的布局参考。图片来源为cdn.nlark.com,支持webp格式并附带水印处理。
47 1
微服务——MongoDB实战演练——表结构分析