SpringCloud学习案例讲解
本人之前所在单位使用的中台系统即为传统的SpringCloud架构,项目是很多年前搭建的,版本较为老旧,基于SpringBoot 1.5.3,SpringCloud Dalston.SR1。目前这个项目即将停止维护,以后会被新的项目替代。由于公司的项目不方便细讲,我在github上找了个类似架构的项目(https://github.com/forezp/springcloud-book/),是《深入理解SpringCloud与微服务构建》这本书最后一章节的示例项目。这里就以这个项目为蓝本,讲下我的学习过程和对SpringCloud各个组件的理解。
很显然,这是个多Module的项目,其中带蓝点的,除了common是公共库之外,其余每一个都是可以单独启动的项目。
一、注册与配置中心
注册中心为eureka-server,配置中心为config-server,这个大家应该很熟悉了。首先编写eureka-server,启动类加上@EnableEurekaServer,并且在配置文件里设置为不注册自身。想要注册到eureka-server的服务,只要将eureka-server的地址写到自己项目下的application.yml文件里,然后在启动类加上注解@EnableEurekaClient就行了。
配置中心config-server,可以从本地仓库读取配置,也可以从远程git仓库读取。config-server也需要注册到eureka,所以一般先启动eureka-server。另,如使用SpringCloud Bus刷新配置,需要先部署rabbitmq。
二、监控
1. admin-service
Spring Boot Admin是一个开源项目,用于监管Spring Boot程序的。分为客户端和服务端,客户端和服务端之间采用http交互数据。单体项目需要整合spring-boot-admin-client,在SpringCloud中server直接从注册中心抓取应用信息,不需要整合。
启动类加上@EnableAdminServer和@EnableEurekaClient。另外本案例中admin-service还整合了Spring Boot Admin Server会请求注册列表里服务Actuator的API接口(被监控的应用需要引入actuator依赖),从而获取服务监控信息。@EnableTurbine默认开启Turbine,Turbine会聚合每个Hustrix dashboard的信息。
2. monitor-service
将user-service,blog-service的Hystrix dashboard聚合到一起。启动类注解如下所示:
@SpringBootApplication
@EnableTurbine
@EnableHystrixDashboard
@EnableHystrix
在Dalston版本中,Feign的Hystrix默认不开启,需要在工程的配置文件里加上feign_hystrix=true
三、网关
使用Zuul网关,实现路由转发、过滤、鉴权。该案例使用了路由转发功能,配置如下
zuul: host: connect-timeout-millis: 20000 socket-timeout-millis: 20000 routes: user-service: path: /userapi/** serviceId: user-service sensitiveHeaders: blog-service: path: /blogapi/** serviceId: blog-service sensitiveHeaders:
外部的请求直接发到Zuul,Zuul根据Url匹配,将请求转到对应的服务。这样做,可以避免多次调用重复鉴权、避免了跨域,也避免了因为SpringCloud内部服务变动导致的外部请求业务跟着需要改动的麻烦。
四、业务应用
1. user-service
应用程序启动类分别加上如下注解:
@SpringBootApplication
@EnableEurekaClient //注册为Eureka客户端
@EnableFeignClients //允许使用Feign进行服务调用
@EnableHystrixDashboard // 开启Hystrix面板
@EnableHystrix //使用Hystix作为断路器
调用其它服务比如uaa-service,先编写一个对应的Client接口,加上注解
@FeignClient(value = "uaa-service",fallback=AuthServiceHystrix.class )
然后编写一个fallback降级处理类,用来直接返回固定内容
@Component public class AuthServiceHystrix implements AuthServiceClient { @Override public JWT getToken(String authorization, String type, String username, String password) { System.out.println("--------opps getToken hystrix---------"); return null; } }
如果需要限制外部请求(请求user-service的接口),需要编写HystrixCommand的实现类,使用注解添加到对应接口。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构