「初学者商城」- 搭建基础架构(接口)

1. 前言


接口主要给后台管理系统和商城前端页面提供数据。

项目使用SpringCloud搭建,其中,

有整合:MyBatis-PlusRedisMongoDBFlywayKafkaSwagger

有组件:EurekaHystrixTurbineGatewaySleuth

现在就先把这些技术整合在一起,并且让它们运行起来。


2. 源码


完整项目地址:https://github.com/intomylife/osc-api

v1.0 标签地址:https://github.com/intomylife/osc-api/releases/tag/v1.0

v1.0 下载地址:ziptar.gz

注:对于标签的说明「初学者商城」- 写在最前面 #5.1


3. 环境


  • JDK 1.8.0 +
  • Maven 3.0 +
  • SpringBoot 2.0.3
  • SpringCloud Finchley.RELEASE
  • Redis 4.0.14
  • MySQL 5.7
  • MongoDB 4.0.12
  • Kafka 2.2.0
  • Zookeeper 3.4.14

4. 工具


  • IntelliJ IDEA
  • Navicat Premium

5. 目录结构


5.1 整体

整个接口源码下载下来后,有两个目录:osc-commonsosc-service

osc-api-1.0/
├── osc-commons
├── osc-service
└── README.md
  • osc-commons:公用工程
  • osc-service:服务工程

5.2 公用工程

放一些公用的配置,常量以及工具类等文件

osc-commons/
├── mvnw
├── mvnw.cmd
├── osc-commons.iml
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── zwc
        │           └── core
        │               ├── config
        │               │   ├── MyBatisPlusConfig.java
        │               │   ├── RedisConfig.java
        │               │   └── SwaggerConfig.java
        │               ├── constants
        │               │   ├── KafkaConstants.java
        │               │   ├── MongoDBConstants.java
        │               │   └── RedisConstants.java
        │               └── utils
        │                   ├── MongoDBClient.java
        │                   └── RedisClient.java
        └── resources
            └── config
                └── system.properties
  • core - config 目录:初始化配置类
  • constants 目录:各种常量类
  • utils 目录:工具类
  • resources - config:配置文件

5.3 服务工程

是一个父工程,里面有很多子工程

osc-service/
├── osc-base-service
│   ├── osc-base-service-api
│   └── osc-base-service-core
├── osc-gateway-service
│   └── src
├── osc-log-service
│   ├── osc-log-service-api
│   └── osc-log-service-core
├── osc-registry-service
│   └── src
├── osc-sleuth-service
│   └── src
└── osc-turbine-service
    └── src
  • osc-base-service:基础工程
  • osc-gateway-service:网关
  • osc-log-service:日志工程
  • osc-registry-service:注册中心
  • osc-sleuth-service:链路跟踪监控中心
  • osc-turbine-service:断路器聚合监控中心
  • 有业务逻辑的工程会细分为:apicoreapi中主要存放扩展实体类和常量类,core中主要存放处理逻辑的核心代码

5.3.1 注册中心

osc-registry-service工程作为整个项目的注册中心部分,其他项目都要把自己注册进来。

注册中心端口一般为8761

加入spring-cloud-starter-netflix-eureka-server依赖后,添加@EnableEurekaServer注解就好,没有太多配置就完成构建了。

5.3.2 网关

osc-gateway-service工程作为整个项目的网关入口,通过路由来匹配并调用不同的服务,还可以对请求进行限流及过滤操作。

网关端口我习惯设置为8000

首先加入spring-cloud-starter-gateway依赖表示自己是网关,然后再加入spring-cloud-starter-netflix-eureka-client依赖 + @EnableEurekaClient注解把自己注册到注册中心;由于网关中的限流操作是结合 Redis 来完成的,所以要加入spring-boot-starter-data-redis-reactive依赖;网关这里还做了熔断操作,当要调用的服务还未启动完成或者宕机时,会进行熔断防止用户看到系统异常,所以也要加入spring-cloud-starter-netflix-hystrix依赖;最后,每次请求到网关后又被网关转发到哪些服务需要通过 Zipkin 记录下来,所以加入了spring-cloud-starter-zipkin依赖。

想具体了解Gateway 组件相关请前往:SpringCloud之服务网关Gateway

5.3.3 业务工程

osc-base-service工程和osc-log-service工程都是专门处理业务逻辑的工程。

首先,这两个工程都加入了只有处理业务的工程才需要的osc-commons依赖;然后再加入spring-cloud-starter-netflix-eureka-client依赖 + @EnableEurekaClient注解把自己注册到注册中心;还加入了服务之间调用需要的spring-cloud-starter-openfeign依赖;处理业务的工程当然也需要熔断,所以加入spring-cloud-starter-netflix-hystrix依赖;最后,服务之间的调用链路同样要被 Zipkin 记录下来,所以也加入了spring-cloud-starter-zipkin依赖。

在搭建基础架构中,一共就两个接口:

  1. /aUseB:主要测试服务间是否能互相调用
  2. /visit/toVisit:主要测试 Redis、MySQL、Kafka、MongoDB、Turbine,Sleuth 是否都能正常工作

想具体了解服务调用相关请前往:SpringCloud之服务注册与发现Eureka+客户端Feign

想具体了解整合 Redis相关请前往:SpringBoot整合Redis

想具体了解整合 MySQL相关请前往:SpringBoot整合MyBatis-Plus

想具体了解整合 Kafka相关请前往:SpringBoot整合Kafka

想具体了解整合 MongoDB相关请前往:SpringBoot整合MongoDB

还有两个重要的成员:

  1. Flyway:数据库版本管理工具
  2. Swagger:Api 文档管理工具

想具体了解整合 Flyway相关请前往:SpringBoot整合Flyway

想具体了解整合 Swagger相关请前往:SpringBoot整合Swagger

5.3.4 断路器聚合监控中心

osc-turbine-service工程会把指定工程的熔断监控全部收集在一起显示。

首先加入spring-cloud-netflix-turbine依赖 + @EnableTurbine注解表示自己是断路器聚合监控中心,然后再加入spring-cloud-starter-netflix-eureka-client依赖 + @EnableEurekaClient注解把自己注册到注册中心;哪些工程会被聚合在一起显示,在配置文件application.ymlturbine.app-config处指定。

想具体了解Turbine 组件相关请前往:SpringCloud之监控数据聚合Turbine

5.3.5 链路跟踪监控中心

osc-sleuth-service工程与注册中心类似,都是有需要就得把自己注册进来。

链路跟踪监控中心端口一般为9411

加入zipkin-server依赖 + @EnableZipkinServer注解表示自己是链路跟踪监控中心,然后再加入spring-cloud-starter-netflix-eureka-client依赖 + @EnableEurekaClient注解把自己注册到注册中心;只有加入了spring-cloud-starter-zipkin依赖的工程才会被监控到,如上面的网关和业务工程。

想具体了解Sleuth 组件相关请前往:SpringCloud之链路跟踪Sleuth


6. 启动


注:最好不要下载最新的代码,为了保证效果一致,请下载v1.0标签的代码

6.1 环境准备

注:搭建本地开发环境的博客后续会补上,这里先默认环境已经与上面#3一致。(搭建本地开发环境的博客链接写在了文末处)

由于这个版本是基础架构(多环境是放到后续博客专门来写的),导致这个版本的RedisMongoDB都配置了密码连接,主要是为了与这个版本对应的部署一致

所以这里启动的话得稍微改动一下:

Redis:

  1. 如果你本地的 Redis 本来就是有密码启动的,那就到redis.conf配置文件中更改密码requirepass 123456789,然后让 Redis 通过redis.conf配置文件重新启动
  2. 如果你本地的 Redis 本来就是没有密码启动的,那就在代码中全局搜password: 123456789,更改为password:

MongoDB:

  1. 如果你本地的 MongoDB 开启了验证,那就到mongodb.cfg配置文件中更改authorization: disabled,然后重新启动 MongoDB
  2. 代码中不用改,因为 MongoDB 校验没有那么严格,只要 MongoDB 服务端不需要密码,那么连接时带不带密码都可以

6.2 启动项目

注:在Maven Projects中添加osc-commons - pom.xmlosc-service - pom.xml

6.2.1 OscRegistryServiceApplication

项目启动成功后访问http://localhost:8761/即可看到注册中心主页面

6.2.2 OscGatewayServiceApplication

项目启动成功后刷新http://localhost:8761/即可看到 GATEWAY-SERVICE 服务注册成功

6.2.3 OscBaseServiceCoreApplication && OscLogServiceCoreApplication

项目都启动成功后刷新http://localhost:8761/即可看到 BASE-SERVICELOG-SERVICE 服务都注册成功

6.2.4 OscTurbineServiceApplication

项目启动成功后访问http://localhost:8762/hystrix即可看到断路器聚合监控中心主页面,在最长的输入框中输入http://localhost:8762/turbine.stream后,点击 Monitor Stream 按钮可以看到两个'Loading …’,因为此时还未调用服务

刷新http://localhost:8761/即可看到 TURBINE-SERVICE 服务注册成功

6.2.5 OscSleuthServiceApplication

项目启动成功后访问http://localhost:9411即可看到链路跟踪监控中心主页面

刷新http://localhost:8761/即可看到 SLEUTH-ZIPKIN-SERVICE 服务注册成功


7. 验证


7.1 业务接口

7.1.1 /aUseB

访问http://localhost:8000/baseService/aUseB,正常的话会返回Hello!I'm b. port:8081;如果返回的是I'm Spring Cloud Gateway fallback.那么再刷新一次,这里是因为Hystrix超时问题,后续博客中会优化

这里面做了哪些事情:

  1. 首先8000是访问的网关服务
  2. 再看网关工程的配置文件(osc-gateway-service - application.yml)中的routes部分,会拦截/baseService/**开头的请求,并且StripPrefix=1截取一位,最后请求被转发到base-service服务
  3. 通过网关路由处理后的路径就变为了http://localhost:8000/aUseB,这时访问的地址就被转发到了基础工程的前端控制器(osc-base-service - osc-base-service-core - AUseBFeignController.java)中的aUseB()方法
  4. aUseB()方法通过Feign调用了日志工程的前端控制器(osc-log-service - osc-log-service-core - BSayHelloApi.java)中的b()方法
  5. 所以最后返回的内容是Hello!I'm b. port:8081

7.1.2 /visit/toVisit

访问http://localhost:8000/baseService/visit/toVisit,正常的话会返回success

这里面做了哪些事情:

  1. 经过上面同样的路由,请求被转发到http://localhost:8000/visit/toVisit,这时调用的是基础工程的前端控制器(osc-base-service - osc-base-service-core - VisitController.java)中的toVisit()方法
  2. 此方法会分别插入一条数据到MySQLRedis
  3. 并且还会发送一条消息
  4. 发送的消息会被日志工程的Kafka 监听到(osc-log-service - osc-log-service-core - KafkaConsumer.java)
  5. 最后在OscLogServiceCoreApplication的控制台会打印类似于KafkaConsumer ---> receiveTopicMessage:{"createDatetime":1577771121680,"sessionId":"6E45447B2F2A0F62CBEF9EFBF6DF121D","updateDatetime":1577771121680}这样的信息

7.1.3 限流

快速刷新(多次访问)http://localhost:8000/baseService/aUseB,浏览器会显示HTTP ERROR 429等信息

7.2 监控

7.2.1 turbine

回到http://localhost:8762/hystrix/monitor?stream=http://localhost:8762/turbine.stream,发现两个’Loading …’消失,显示的是每个接口的调用情况

7.2.2 sleuth

访问http://localhost:9411/zipkin后,点击 Find Traces 蓝色按钮,会显示每个请求的请求时长等信息,点击其中一条,可以看到更详细的请求信息

访问http://localhost:9411/zipkin/dependency/,可以看到请求依赖关系图

7.3 文档

7.3.1 Swagger

注:后续会把Swagger聚合在一起显示

  1. 基础工程:http://localhost:8080/swagger-ui.html

  2. 日志工程:http://localhost:8081/swagger-ui.html

7.4 数据库

7.4.1 Flyway

使用Navicat等图形化工具连接本地MySQL,发现多了一个osc_db库,目前里面只有两张表:

  1. flyway_schema_history是 Flyway 自动生成的,用来记录版本信息的表
  2. visit是基础工程的配置文件(osc-base-service - osc-base-service-core - resources - db.zwc)中的.sql脚本执行结果所产生的表,表里还有刚刚访问时插入的数据

8. 结语


整个项目能运行起来也算是成功的迈出了第一步。阿,快乐。


9. 相关文章


9.1 准备工作

「初学者商城」- 写在最前面

9.2 搭建基础架构

「初学者商城」- 搭建基础架构(接口)  👀

「初学者商城」- 搭建基础架构(后台管理系统)

「初学者商城」- 搭建基础架构(部署)

9.3 搭建本地开发环境

「初学者商城」- 搭建本地开发环境(JDK)

「初学者商城」- 搭建本地开发环境(Maven)

「初学者商城」- 搭建本地开发环境(Redis)

「初学者商城」- 搭建本地开发环境(MySQL)

「初学者商城」- 搭建本地开发环境(MongoDB)

「初学者商城」- 搭建本地开发环境(ZooKeeper)

「初学者商城」- 搭建本地开发环境(Kafka)


希望能够帮助到你

over




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值