今天做了什么:

  • idworker-client ,一个开源的 ID 生成器,适合在单机使用
  • github 上创建了一个使用 spring cloud netflix 相关组件的微服务项目 spring-cloud-examples
  • 重构了狂野架构师课程中的微服务版本的源码

foodie-cloud

重构慕课网 Java架构师-技术专家 课程中的 源码,我做了一些改动:

  • 升级 Spring Boot 和 Spring Cloud 版本
  • 去掉 tk-mybatis 改为使用 mybatis-plus
  • 重构模块和部分代码

重构后的源码地址:https://github.com/chensoul/foodie-cloud

后续计划:

  • docker 容器编排
  • k8s 容器编排
  • 集成 Spring Security OAuth2
  • 集成 Spring Cloud alibaba

开发环境和开源项目版本

软件版本:

组件用途版本号
Redis缓存组件5.0.4
RabbitMQ消息中间件3.7.15
Kafka消息中间件2.2.0
Lua限流脚本5.3.5
MySQL数据库5.7
IDEA开发环境版本随意
Java编译运行项目1.8以上(推荐8u161以后的版本,否则要装JCE插件)
Maven依赖管理3.0.4以上

Maven 依赖版本:

组件版本号
Spring Cloud2021.0.9
Spring Boot2.7.18
Mybatis Plus3.5.5

技术选型

Spring Cloud每个业务领域都有多个可供选择的组件,这里也列出了微服务章节中将要用到的组件+中间件的技术选型,这也是当前主流的选型。

内容技术选型
服务治理Eureka
负载均衡Ribbon
服务间调用Feign
服务容错Hystrix + Turbine + Dashboard
配置管理Config + Github
消息总线Bus + RabbitMQ
服务网关Gateway
调用链追踪Sleuth + Zipkin + ELK
消息驱动Stream + RabbitMQ
流控Sentinel
基于RPC的服务治理
(不集成到电商项目)
Dubbo + Admin Portal

默认端口

内容端口
Eureka20000
Turbine20001
Hystrix-Dashboard20002
Config-Server20003
Gateway20004
Zipkin9411
ELK镜像-ES9200
ELK镜像-Logstash5044
ELK镜像-Kibana5601
redis(单机模式)6379
rabbitmq(单机模式)5672
mariadb/mysql(单机模式)3306
商品微服务10001
用户微服务10002
订单微服务10003
购物车微服务10004
权限微服务10006
主搜微服务同学们自己实现
支付服务没变,但回调地址要改一下

启动方式

可以在IDEA里启动,也可以使用Maven编译后在命令行窗口启动,命令行启动方式需要在maven编译好项目之后,cd到对应项目下的target目录,然后使用命令"java -jar xxx.jar"执行编译好的jar包即可。

启动顺序:

  • 先确保RabbitMQ,Redis和Mariadb/MySQL处于启动状态
  • 启动Eureka - 所有微服务和SC平台组件都依赖Eureka做服务注册
  • 启动Config-Server - 部分微服务依赖配置中心拉取配置项
  • 启动Hystrix监控模块 - Turbine和Hystrix-Dashboard,等到后续微服务注册到注册中心后,Turbine下次做服务发现之后就可以正常收集数据了
  • 启动链路追踪组件 - Zipkin和ELK容器
  • 依次启动Auth微服务 -> User微服务 -> Item微服务 -> Cart微服务 -> Order微服务,以及留给同学们完成的主搜服务,支付中心
  • 最后启动Gateway网关 - 在微服务都启动好之后再启动网关,可以保证网关启动后立即生效。反过来先启动网关再注册微服务也行,但是Gateway会处于短暂的不可用状态,因为Gateway启动的时候微服务还没注册,需要等Gateway做服务发现后才能生效