- 博客(492)
- 收藏
- 关注
原创 微服务保护和分布式事务-01.雪崩问题-原因分析
本文介绍了微服务架构拆分过程中遇到的问题及解决方案。通过OpenFeign解决服务间调用,使用Nacos进行服务治理和配置管理,引入网关实现请求路由和认证。随着服务增多,还面临服务保护和分布式事务等新挑战。重点阐述了雪崩问题的产生机制:当某个服务故障时,请求堆积会导致资源耗尽,最终使整个系统瘫痪。摘要涵盖了微服务架构的核心组件和关键问题,突出了雪崩效应的危害性。
2025-08-28 22:20:09
437
原创 微服务-30.配置管理-动态路由
本文介绍了如何利用Nacos实现网关的动态路由配置。传统网关路由配置需要重启服务才能生效,而通过Nacos的配置热更新能力,可以在不重启网关的情况下实现路由变更。具体实现步骤包括:1)将路由配置存入Nacos;2)通过Nacos SDK监听配置变更;3)在网关服务中实现配置变更监听器,当配置更新时自动刷新路由表。文章详细说明了如何通过NacosConfigManager获取配置服务、添加监听器,以及使用RouteDefinitionWriter进行路由表的增删操作。关键点在于首次加载配置后持续监听变更,并在
2025-08-27 22:19:48
1089
2
原创 微服务-29.配置管理-配置热更新
本文介绍了如何利用Nacos实现配置热更新功能。以购物车数量上限为例,首先在Nacos控制台添加配置文件cart-service.yaml,设置hm.cart.maxAmount参数。然后在微服务中创建CartProperties类读取该配置,并通过@ConfigurationProperties注解绑定。当在Nacos中修改配置参数后,无需重启服务,新配置即可立即生效。这种方法有效解决了传统配置修改需要重新打包部署的问题,实现了业务参数的动态调整。
2025-08-27 14:43:56
186
原创 微服务-28.配置管理-共享配置
文章摘要:本文介绍了如何将微服务的共享配置统一抽取到Nacos中进行管理。首先在Nacos控制台添加JDBC、日志和Swagger的共享配置,支持通过变量覆盖默认值。然后在微服务中引入相关依赖,创建bootstrap.yaml文件指定Nacos地址和共享配置。最后调整application.yaml保留特有配置。通过这种方式实现了配置的集中管理,避免了重复配置,同时保持了配置的灵活性。
2025-08-26 22:19:28
486
原创 微服务-27.配置管理-什么是配置管理
本文探讨了微服务架构中配置管理面临的挑战,包括重复配置、硬编码路由和业务配置导致的维护困难。针对这些问题,提出了使用Nacos作为统一配置管理器的解决方案。Nacos不仅能集中管理共享配置,还支持配置热更新和动态路由功能,无需重启服务即可生效变更,有效降低了配置维护成本。这一方案同时利用了Nacos兼具的服务注册与配置管理双重功能。
2025-08-26 17:48:16
252
原创 微服务-26.网关登录校验-OpenFeign传递用户信息
摘要:文章介绍了如何在微服务架构中使用OpenFeign实现用户信息传递。当交易服务需要调用购物车服务清理用户购物车时,通过实现Feign的RequestInterceptor接口,自动将用户信息添加到请求头中。具体实现是在hm-api模块的DefaultFeignConfig配置类中定义拦截器,从UserContext获取用户ID并存入请求头,确保服务间调用能传递用户信息。最后需在交易服务的启动类中启用该配置。
2025-08-26 17:42:44
563
原创 微服务-25.网关登录校验-网关传递用户到微服务
文章摘要:本文介绍了微服务架构中用户信息传递的解决方案。通过在网关使用GlobalFilter将用户ID存入请求头,并在微服务端通过SpringMVC拦截器统一处理,将用户信息保存到ThreadLocal中。关键实现包括:1)网关过滤器修改请求头;2)定义通用拦截器存入用户上下文;3)使用条件注解确保配置类只在微服务生效。该方案避免了在每个微服务重复编写用户信息处理逻辑,实现了用户信息的统一管理和线程安全访问。
2025-08-26 17:00:44
446
原创 微服务-24.网关登录校验-实现登录校验
摘要:本文介绍了基于JWT的网关登录校验实现方案。主要包括:1)配置文件定义拦截路径和JWT参数;2)AuthGlobalFilter过滤器实现路径匹配、token校验功能;3)JwtTool工具类封装token生成与解析逻辑;4)校验失败时返回401状态码。通过AntPathMatcher匹配排除路径,利用JWT签名验证用户身份,为后续请求处理提供安全保障。
2025-08-26 16:05:14
420
原创 微服务-23.网关登录校验-自定义GlobalFilter
摘要:本文介绍了Spring Cloud Gateway中自定义全局过滤器(GlobalFilter)的实现方法。通过实现GlobalFilter和Ordered接口,可以创建优先级为0的自定义过滤器,确保其在NettyRoutingFilter之前执行。代码示例展示了如何获取请求头信息并传递给下一个过滤器,其中filter方法接收ServerWebExchange和GatewayFilterChain参数,通过chain.filter(exchange)实现过滤器链的传递。Ordered接口的getOrd
2025-08-26 15:16:22
293
原创 微服务-22.网关登录校验-思路分析
本文探讨了微服务架构下登录校验的优化方案。传统单体架构只需一次登录校验,而微服务拆分后每个服务独立部署导致校验重复。基于JWT的实现面临秘钥安全性和代码重复问题。通过将登录校验移至网关层,可统一处理并提升安全性。文章详细分析了网关过滤器的工作原理,提出在请求转发前通过自定义过滤器实现JWT校验,并将用户信息通过请求头传递给微服务。同时探讨了微服务间调用时的用户信息传递问题,对比了网关到微服务与微服务间调用的实现差异。
2025-08-24 22:43:05
866
原创 微服务-21.网关路由-路由属性
本文介绍了SpringCloud Gateway中的路由配置与功能。路由属性通过RouteDefinition类进行配置,满足不同场景需求。路由断言支持多种条件匹配,如Path参数占位符{segment}、After/Before时间判断等。路由过滤器提供AddRequestHeader(添加请求头)和StripPrefix(去除路径前缀)等常用功能,方便请求处理。这些功能可通过yaml文件配置实现灵活的路由控制。
2025-08-24 21:57:41
171
原创 微服务-20.网关路由-快速入门
本文介绍了如何快速搭建Spring Cloud Gateway微服务网关。主要内容包括:1)创建hm-gateway模块;2)引入SpringCloudGateway、Nacos服务发现等依赖;3)编写启动类;4)配置路由规则,通过Path断言将不同URL路径映射到对应的微服务(item/cart/user/trade/pay)。配置完成后,网关可以实现请求路由和负载均衡功能。
2025-08-24 17:50:06
230
原创 微服务-19.什么是网关
本文阐述了引入网关的必要性及其核心功能。在单体架构拆分为微服务后,前端面临服务端口动态变化、请求路由复杂等问题。网关通过统一入口解决了前端请求路由问题,提供负载均衡能力,并整合注册中心实现服务动态发现。同时,网关集中处理身份认证,避免各微服务重复实现登录校验逻辑,降低密钥泄露风险。使用网关后,对前端屏蔽了后端架构变化,保持了类似单体架构的开发体验。文章最后提到采用SpringCloudGateway作为实现方案。
2025-08-24 17:01:11
228
原创 微服务-18.OpenFeign-日志输出
OpenFeign日志配置指南:默认不记录日志(NONE),可通过配置类设置BASIC、HEADERS或FULL级别日志。配置方式分局部(针对单个FeignClient)和全局(所有FeignClient)两种。FULL级别会完整记录请求/响应头、元数据和内容,示例日志显示了包含请求方法、URL、状态码、响应头和JSON数据的详细输出。需确保相关包日志级别设为DEBUG才能生效。
2025-08-23 16:17:46
369
原创 微服务-17.OpenFeign-最佳实践
文章摘要:本文讨论了在拆分trade-service微服务时避免重复编码的两种方案。通过分析现有下单业务逻辑,指出需要复用item-service查询功能的问题。最终选择方案1,即在项目外层创建公共模块hm-api来统一管理Feign客户端接口,并通过调整包扫描范围解决服务启动问题。这种方案虽增加项目耦合度,但实现简单且工程结构清晰,适合当前item-service不可拆分的情况。
2025-08-23 16:13:53
400
原创 微服务-16.OpenFeign-连接池
摘要:Feign默认使用HttpURLConnection发起HTTP请求,但不支持连接池。为提高性能,可改用支持连接池的ApacheHttpClient或OKHttp。以OKHttp为例,需在pom.xml中添加feign-okhttp依赖,并在application.yml中开启feign.okhttp.enabled=true配置。重启服务后,通过断点调试可验证底层已切换为OkHttpClient实现,连接池功能生效。
2025-08-22 16:34:20
360
原创 微服务-15.OpenFeign-快速入门
OpenFeign简化了微服务间的远程调用,使其像本地方法调用一样简单。它通过动态代理基于SpringMVC注解自动生成调用代码,只需定义接口并标注服务名、请求方式和路径等参数。示例中,在cart-service引入OpenFeign依赖后,定义ItemClient接口声明远程调用item-service的/items接口,即可直接调用该方法完成服务发现、负载均衡和HTTP请求,无需手动编写复杂代码。相比RestTemplate,OpenFeign提供了更优雅统一的编程体验。
2025-08-22 16:06:12
390
原创 微服务-14.服务治理-服务发现和负载均衡
文章摘要:介绍了基于Nacos实现服务发现的三个步骤:1)引入SpringCloud负载均衡和Nacos服务发现依赖;2)在配置文件中添加Nacos服务地址;3)通过DiscoveryClient发现服务实例,结合负载均衡算法(如随机选择)进行服务调用。文中以cart-service调用item-service为例,展示了如何从硬编码IP转向动态服务发现的实现过程,通过Swagger测试验证了方案可行性。
2025-08-22 15:53:08
425
原创 微服务-13.服务治理-服务注册
本文介绍了将item-service注册到Nacos的步骤:首先在pom.xml中添加Nacos服务发现依赖;然后在application.yml中配置服务名称和Nacos服务器地址;最后通过配置不同端口启动两个服务实例进行测试。完成注册后,可在Nacos控制台查看已注册的两个item-service实例详情。整个过程实现了服务注册与多实例部署的验证。
2025-08-20 22:41:45
283
原创 微服务-12.服务治理-搭建Nacos注册中心
摘要:Nacos作为国内广泛使用的注册中心框架,因其中文文档丰富且兼具配置管理功能,教学采用其为例。本文介绍了Nacos的Docker部署流程,包括MySQL数据库准备(需导入SQL文件)、修改配置文件中的MySQL地址,以及通过Docker命令启动Nacos服务。最后通过访问8848端口(默认账号密码nacos)即可进入管理界面。
2025-08-20 17:59:17
391
原创 微服务-11.服务治理-注册中心原理
本文介绍了微服务架构中的服务注册与发现机制。通过分析多实例部署带来的地址管理问题,引出注册中心的必要性。注册中心负责管理服务提供者(如item-service)和消费者(如cart-service)的关系,包括服务注册、健康检查、服务发现和负载均衡。服务提供者定期发送心跳,注册中心维护服务列表并在变更时通知消费者,确保调用实时性和可靠性。这种机制有效解决了微服务动态伸缩和故障转移的问题。
2025-08-20 16:52:36
259
原创 微服务-10.微服务拆分-远程调用
本文介绍了微服务架构中服务拆分后如何进行远程调用。以购物车服务调用商品服务为例,通过RestTemplate实现HTTP方式RPC调用。具体步骤包括:1)在消费方注册RestTemplate;2)使用exchange方法发送HTTP请求;3)解析响应数据。文章对比了单体与微服务架构的适用场景,建议初创公司先采用单体架构验证业务。在微服务拆分原则上,强调高内聚低耦合,可采用纵向业务拆分或横向通用服务拆分。最后总结了RPC的多种实现方式,推荐使用与语言无关的HTTP协议,并详细说明了RestTemplate的基
2025-08-20 15:56:43
716
原创 微服务-09.微服务拆分-拆分购物车微服务
本文介绍了在hmall项目中创建购物车服务(cart-service)的详细过程。主要包括:1)创建基于Spring Boot的cart-service模块,配置Maven依赖;2)编写启动类并配置application.yaml;3)从item-service移植购物车相关功能代码;4)处理需要跨服务查询商品信息的代码问题;5)导入数据库表结构进行测试。重点说明了当前服务中查询商品信息的接口暂时被注释的问题,为后续实现服务间通信埋下伏笔。项目最终可通过Swagger进行测试,但商品相关字段显示为空。
2025-08-20 09:29:58
461
原创 微服务-08.微服务拆分-拆分商品服务
本文介绍了如何在Hmall项目中拆分商品服务模块的步骤。主要内容包括:1)创建名为item-service的Maven模块,配置JDK 11并添加必要依赖;2)编写启动类并配置相关YAML文件;3)从原有服务迁移商品管理相关代码,调整ItemServiceImpl中的deductStock方法;4)导入独立的hm-item数据库;5)配置启动参数并测试接口功能。通过Swagger接口文档验证,商品微服务已成功拆分并独立运行。文章强调了在生产环境中每个微服务应有独立数据库服务的重要性。
2025-08-19 17:23:49
515
原创 微服务-07.微服务拆分-微服务项目结构说明
本文介绍了黑马商城的模块化拆分方案,提出纵向拆分的架构思路。分析两种工程结构实现方式:一是独立Project模式,二是基于Maven的聚合工程模式。两种方案各有特点,可根据项目需求选择适合的架构方式,实现系统的高效拆分与模块化管理。
2025-08-19 13:46:27
215
原创 微服务-05.微服务拆分-熟悉黑马商城
文章摘要: 黑马商城项目功能模块分析及核心业务逻辑实现。项目包含用户、商品、购物车、订单和支付五大模块,重点分析了用户登录和购物车功能实现。用户登录采用JWT令牌认证,通过拦截器解析Token并存入ThreadLocal上下文;购物车功能实现了商品信息实时同步,查询时不仅获取购物车数据还关联查询商品最新状态。支付模块目前仅实现余额支付功能,通过校验支付密码完成扣款操作。文章详细展示了各模块的代码实现和业务逻辑处理过程。
2025-08-18 22:57:56
706
1
原创 微服务-04.认识微服务-SpringCloud
SpringCloud是目前Java领域最全面的微服务组件集合,依托SpringBoot自动装配能力,显著降低微服务开发成本,特别适合中小型企业。最新2022.0.x版本需JDK17支持,目前企业使用较少,推荐使用次新版本2021.0.x+SpringBoot2.7.x组合。SpringCloud Alibaba已成为官方组件,课程中将使用部分功能。父工程已预配置版本依赖,后续开发无需单独指定版本。
2025-08-18 16:00:59
452
原创 微服务-03.认识微服务-微服务架构
微服务架构通过将单体应用拆分为独立部署的小型服务来解决传统架构问题。每个微服务具有单一职责、团队自治(小团队独立运作)和服务自治(独立数据库和部署)的特点。以黑马商城为例,商品、用户等模块可拆分给不同团队开发。这种架构降低了协作成本、提高了发布效率、增强了系统可用性。微服务是分布式架构的最佳实践,但也会面临跨服务业务处理、请求路由和服务隔离等新问题,需要在实践中逐步解决。
2025-08-18 15:18:13
343
原创 微服务-02.认识微服务-单体架构
本文分析了单体架构在大型项目开发中的局限性,重点阐述了其存在的三大问题:团队协作成本高、系统发布效率低和系统可用性差。通过黑马商城项目实例演示了热点接口对其他功能的负面影响,验证了单体架构资源分配不均的缺陷。文章指出水平扩展无法从根本上解决这些问题,进而引出微服务架构作为解决方案的必要性,为后续探讨微服务架构优势做铺垫。全文通过具体案例形象展示了单体架构的弊端,为读者理解微服务架构的价值提供了实践依据。
2025-08-18 15:15:48
472
原创 微服务-01.导入黑马商城
本文介绍了将单体项目拆分为微服务项目的实践过程。首先在虚拟机中部署MySQL数据库容器,配置数据卷和网络,并验证容器正常运行。接着导入Java后端代码,在IDEA中配置SpringBoot启动环境并运行服务。最后部署前端项目,使用Nginx启动静态资源服务,并通过命令行管理Nginx进程。整个流程涵盖了从数据库配置、后端服务启动到前端部署的完整微服务项目搭建过程。
2025-08-18 11:23:00
452
原创 Docker-14.项目部署-DockerCompose
Docker Compose 是一个简化多容器部署的工具,通过 YAML 文件定义关联容器。文章通过 Java 项目示例,对比了传统 docker run 命令与 docker-compose.yml 的写法差异,展示了如何定义 MySQL、Java 应用和 Nginx 服务,包括网络配置、卷挂载等。重点介绍了 docker-compose 常用命令如 up/down/ps/logs 等,并演示了一键部署流程。使用 Docker Compose 能有效管理复杂项目的整体部署,提高运维效率。
2025-08-17 17:38:05
546
原创 Docker-13.项目部署-部署前端
本文介绍了如何通过Nginx容器部署前端项目,包括配置挂载和网络设置。主要内容: 配置Nginx容器挂载前端代码目录(html)和配置文件(nginx.conf) 设置两个server分别代理后台管理(18081端口)和用户端(18080端口)的前端项目 配置/api请求转发到后端服务(hm:8080) 创建容器时指定端口映射、目录挂载和加入hmall网络 最终通过浏览器访问对应端口即可测试部署效果 该方案实现了前后端分离部署,通过Nginx反向代理实现前后端通信,适合多前端项目的容器化部署场景。
2025-08-16 18:49:17
223
原创 Docker-12.项目部署-部署Java应用
本文介绍了Java应用部署到Docker容器的过程。项目通过配置文件动态配置MySQL数据库连接,使用${hm.db.host}容器名代替固定IP地址。Dockerfile基于openjdk:11.0镜像构建,设置了时区并拷贝jar包。构建镜像后,通过docker run命令启动容器,映射8080端口并连接至heim网络。最终验证显示应用成功部署,接口能正常返回数据。整个部署过程涵盖了从配置文件处理到容器编排的关键步骤,实现了Java应用的容器化部署。
2025-08-15 11:58:00
190
原创 Docker-11.Docker基础-容器网络互连
Docker容器间通信主要通过虚拟网络实现。默认情况下,容器通过docker0网桥连接,获得172.17.0.x的IP地址,共享同一网关172.17.0.1,这使得它们可以相互访问。但依赖动态IP会导致连接问题,因此建议使用自定义网络。通过创建自定义网络(如heima),容器加入后可以通过容器名直接通信,解决了IP变动问题。创建方式包括容器创建后连接(docker network connect)或启动时指定(--network)。同一自定义网络内的容器可互相访问,不同网络的容器则隔离。这种方式既保证了通信
2025-08-13 10:53:25
341
原创 Docker-10.Docker基础-自定义镜像
本文介绍了如何使用Dockerfile构建自定义镜像并运行容器。主要内容包括:1)Dockerfile基本语法,如FROM指定基础镜像、COPY复制文件、ENTRYPOINT设置启动命令等;2)构建镜像命令"docker build -t 镜像名:版本号 ."的使用方法;3)时区设置等常见配置;4)从tar包加载基础镜像的docker load命令;5)最后通过docker run运行容器并验证。文中通过一个Java应用示例演示了整个流程,强调要确保Dockerfile与相关文件在同一目
2025-08-12 11:20:23
427
原创 Docker-09.Docker基础-Dockerfile语法
摘要:本文介绍了如何将Java项目制作成Docker镜像。首先需要准备Linux运行环境、JRE环境、Jar包和启动脚本,这些步骤分别对应镜像的不同层次。Docker采用分层架构,每层对应一个操作,这样既便于解耦又节省存储空间。通过Dockerfile可以简化镜像构建过程,只需描述基础镜像、环境配置、文件拷贝等关键步骤即可。其中基础镜像如JDK镜像已包含常用配置,只需关注应用层即可完成镜像构建。这种分层机制提高了镜像复用性,使构建过程更加高效便捷。
2025-08-11 21:42:33
365
原创 Docker-08.Docker基础-本地目录挂载
本文介绍了MySQL容器数据卷挂载的必要性和操作方法。首先通过docker inspect命令查看容器的匿名卷挂载情况,指出匿名卷的弊端:自动生成的名字难以记忆,且容器升级时无法保留原有数据。为解决此问题,建议采用本地目录挂载方式,并详细说明了操作步骤:1)创建conf、data、init三个本地目录;2)查阅官方文档确定容器内需要挂载的路径;3)通过docker run命令实现本地目录挂载,包括数据目录、配置文件和初始化脚本的挂载设置。最后通过验证新数据生成确认挂载成功,实现了更可靠的MySQL数据持久化
2025-08-11 16:06:26
458
原创 Docker-07.Docker基础-数据卷挂载
摘要:本文介绍了使用Docker数据卷技术解决Nginx容器内静态资源修改问题的方法。通过案例说明直接修改容器内文件不可行,转而采用数据卷技术实现宿主机与容器的文件共享。详细讲解了数据卷的创建和挂载过程,包括docker run命令的-v参数使用,以及如何查看数据卷详情和挂载点。最终实现在宿主机直接修改文件即可同步更新容器内文件的效果,简化了静态资源部署流程。
2025-08-04 22:00:16
878
原创 Docker-06.Docker基础-命令别名
摘要:本文介绍了如何通过修改/root/.bashrc文件为常用Docker命令创建简洁别名。具体展示了将繁琐的docker ps命令格式化为"dps"别名的方法,同时添加了"dis"作为docker images的别名。修改后需执行source命令使配置生效,从而简化日常操作。这种方法适用于需要频繁使用特定格式查看Docker容器和镜像的场景。
2025-08-04 17:50:01
224
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅