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

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

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

gitee https://gitee.com/Qiuner 🌹

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

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

  • 这篇有不少bug记录与方便您复制的代码,相信一定能节省学习时间同时达到更好的效果
  • 本博客要与原文档搭配使用 day04-微服务02 - 飞书云文档 (feishu.cn)
  • 初学微服务的人,可能会三种不同的拦截器感到迷惑,但其实并不难,我再此也花了一些笔墨来介绍。相信您看了后很快就能理解
  • 原本文档已经介绍的很详细了,很难有多余的补充,就是天的课引导不够好吧,可能会让人迷糊一下

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

我启动不了项目!!它一直滚动报错!!!项目报错java.util.concurrent.ExecutionException: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

  • 如图所示,你发现自己使用docker start mysql/nacos打开了mysql容器和nacos容器,也没有其他问题,但还是一直报错

image-20240622161958497

  • 这是因为nacos启动需要mysql中的数据库数据,所以你需要先启动mysql容器,然后启动nacos

  • 而且mysql容器启动也需要时间,所以不能连着敲

image-20240710152231514

  • 具体情况可以打开 docker logs naocs进行查看

网关概述与粗浅使用

image-20240622163328468

  • 单体项目对用户账号、多模块业务进行一次认证就好了,而微服务项目将认证说不定都拆分成一个模块,因此需要一个网关,网关本身也是微服务中的一个模块

image-20240622163621898

image-20240622163603100

image-20240622163653475

image-20240624095736881

  • 配置网关路由为重点

image-20240625100140646

  • 通过路由网关,实现了什么效果?

  • 本来需要访问8081端口才能到数据,但有了网关后,访问8080也能得到8081模块的数据

image-20240625100306038

网关路由的具体属性

image-20240625100724015

image-20240625100904101

image-20240625101221512

  • stripPrefix用户帮助前后端的项目不同格式请求。
  • 这里添加请求头呀、移除请求头都有局部和全局之分,通过不同的属性来进行判断

网关登录校验

image-20240625102314963

image-20240625102449614

image-20240625102608915

image-20240625102736106

GlobalFilter

image-20240711082447676

如何找到NettyRoutingFilter?

image-20240711083334430

  • 使用ctrl+左击这里

image-20240711083434430

  • 在这个包里面,找找就到了

GatewayFilter

image-20240711090025305

  • 关于工厂类,可以看我的博客 https://blog.csdn.net/qq_61654952/article/details/138126798?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172065957216800180617352%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172065957216800180617352&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-138126798-null-null.nonecase&utm_term=%E8%AE%BE%E8%AE%A1&spm=1018.2226.3001.4450

image-20240712094133619

  • 全局过滤器局部过滤器也是通过实现的Ordered接口数字大小来决定谁先执行的
过滤器携带参数

image-20240712094605849

案例:登录校验

image-20240712102441376

报错Failed to bind properties under ‘hm.jwt.location’ to cn.hutool.core.io.resource.Resource:

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'hm.jwt.location' to cn.hutool.core.io.resource.Resource:

    Property: hm.jwt.location
    Value: "classpath:hmall.jks"
    Origin: class path resource [application.yaml] - 36:15
    Reason: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [cn.hutool.core.io.resource.Resource]

Action:

Update your application's configuration


进程已结束,退出代码为 1
  • 遇到这种情况,直接删除config文件夹下的东西,再次导入一遍

网关传递用户

image-20240712211133643

image-20240712213302366

image-20240712213930265

  • 这里指挥拦截从网关发过来的请求

OpenFeign

image-20240712215210702

  • 就是微服务之间,互相需要调用。这个调用不走网关,因此需要再写一个类似拦截器的东西保存用户id

总结 微服务登录体系下三种拦截器

image-20240712220359885

特性 网关拦截器 (GlobalFilter) 微服务拦截器 (HandlerInterceptor) OpenFeign拦截器 (RequestInterceptor)
作用范围 所有进入网关的请求 微服务内部的请求处理 Feign 客户端发起的 HTTP 请求
典型用途 鉴权、日志记录、流量控制、请求预处理 认证与授权、日志记录、数据验证 修改请求、添加认证信息、日志记录
实现接口 GlobalFilter HandlerInterceptor RequestInterceptor
触发时机 请求进入网关时 请求到达控制器之前和之后 Feign 客户端发起请求前
依赖框架 Spring Cloud Gateway Spring MVC OpenFeign
配置复杂度 中等
适用场景 全局拦截、网关层面的统一处理 各微服务内部的请求预处理和后处理 Feign 调用时需要统一处理请求信息+
  • Feign 客户端是用来发送请求的

配置共享

添加配置

第一步

image-20240712222358307

第二步

image-20240712222115188

拉取配置

image-20240712222735936

  • nacos会先运行,但会面对加载失败问题,因为nacos的配置还没加载进来

image-20240712222920291

  • 使用bootstrap来解决问题,解决了先运行的时候配置没有加载的问题

image-20240712223027565

在这里插入图片描述

  • 添加一个bootstrap和修改原本配置即可

配置热更新

image-20240712223931620

image-20240712223951349

第一步:添加使用的文件

image-20240712225032188

第二步:修改原本写死的文件

image-20240712225100740

第三步:在nacos中添加配置

image-20240712225158593

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 23:26:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 23:26:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 23:26:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 23:26:03       69 阅读

热门阅读

  1. 代码优化方法记录

    2024-07-12 23:26:03       23 阅读
  2. 创建I/O文件fopen

    2024-07-12 23:26:03       15 阅读
  3. 学习大数据DAY15 PLSQL基础语法4

    2024-07-12 23:26:03       14 阅读
  4. 发改委对招标投标领域问题答复汇总

    2024-07-12 23:26:03       20 阅读
  5. 使用JDBC实现事务管理与隔离级别设置

    2024-07-12 23:26:03       19 阅读
  6. SDK游戏盾、高防IP和高防CDN有什么区别

    2024-07-12 23:26:03       19 阅读
  7. docker compose down -v 是什么意思

    2024-07-12 23:26:03       20 阅读
  8. Perl文件锁机制:守护你的数据安全

    2024-07-12 23:26:03       20 阅读
  9. js面试题2024

    2024-07-12 23:26:03       19 阅读