基于SpringCloud搭建新生电子报道系统

x33g5p2x  于2022-05-23 转载在 Spring  
字(4.6k)|赞(0)|评价(0)|浏览(551)

根据要求将新生电子报道系统由SpringBoot拆分为SpringCloud,只做架构的修改,不涉及业务源码修改。

1、技术栈选型

技术栈功能/版本
Spring Boot2.2.5.RELEASE
Spring CloudHoxton.SR6
Spring Cloud Alibaba2.1.2.RELEASE
Nacos注册中心,配置中心
OpenFeign远程调用
Gateway网关,请求分发,统一拦截
Sentinel服务限流,熔断监控
Seata分布式事务
Zipkin + Sleuth链路追踪
Spring Boot Admin状态监控
ELK日志分析解决方案

2、模块划分

  1. electronic-registration-cloud
  2. ├── erc-admin -- 业务:管理员模块 [8005]
  3. ├── erc-common -- 系统公共模块
  4. ├── erc-data -- 业务:大屏模块 [9001]
  5. ├── erc-gateway -- Spring Cloud Gateway网关 [9527]
  6. ├── erc-monitor -- Spring Boot Admin 服务状态监控 [8769]
  7. ├── erc-openid -- 业务:微信模块[8003]
  8. ├── erc-praise -- 业务:喜报模块 [8004]
  9. ├── erc-healthinfo -- 业务:健康码模块[8006]
  10. └── erc-student -- 业务:用户模块 [8001]

3、基本服务搭建

3.1、Nacos

参考:https://blog.csdn.net/su2231595742/article/details/122827205?spm=1001.2014.3001.5502

3.2、sentinel dashboard的安装

普通安装

1、下载 https://github.com/alibaba/Sentinel/releases

2、启动

  • 仪表盘是个jar包可以直接通过java命令启动 如: java -jar 方式运行 默认端口为 8858
  • java -jar sentinel-dashboard-1.7.2.jar

3、访问web界面 http://localhost:8858/

  • 用户名&密码: sentinel

注:这种启动方式要一直终端窗口开启

Docker方式安装

  1. # 1. 搜索镜像
  2. docker search sentinel-dashboard
  3. # 2. 拉取镜像
  4. docker pull bladex/sentinel-dashboard
  5. # 3. 查看端口
  6. docker inspect sentinel-dashboard
  7. 发现默认暴露端口为87198858
  8. # 4. 启动
  9. docker run --name sentinel -d -p 8858:8858 -p 8719:8719 -d bladex/sentinel-dashboard

3.3、Zipkin

docker方式安装

  1. docker search zipin
  2. docker pull openzipkin/zipkin
  3. docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin

普通方式安装(要求jdk 1.8+环境)

  1. curl -sSL https://zipkin.io/quickstart.sh | bash -s
  2. java -jar zipkin.jar

使用mysql实现数据持久化

1、创建mysql数据环境

  1. CREATE TABLE IF NOT EXISTS zipkin_spans (
  2. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  3. `trace_id` BIGINT NOT NULL,
  4. `id` BIGINT NOT NULL,
  5. `name` VARCHAR(255) NOT NULL,
  6. `parent_id` BIGINT,
  7. `debug` BIT(1),
  8. `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
  9. `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
  10. ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
  11. ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
  12. ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
  13. ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
  14. ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
  15. ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';
  16. CREATE TABLE IF NOT EXISTS zipkin_annotations (
  17. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  18. `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
  19. `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
  20. `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
  21. `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
  22. `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
  23. `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
  24. `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
  25. `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
  26. `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
  27. `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
  28. ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
  29. ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
  30. ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
  31. ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
  32. ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
  33. ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
  34. ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
  35. CREATE TABLE IF NOT EXISTS zipkin_dependencies (
  36. `day` DATE NOT NULL,
  37. `parent` VARCHAR(255) NOT NULL,
  38. `child` VARCHAR(255) NOT NULL,
  39. `call_count` BIGINT
  40. ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
  41. ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

2、在启动ZipKin Server的时候,指定数据保存的mysql的信息

  1. java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=123456

docker方式

  1. docker run --name zipkin -d \
  2. -p 9411:9411 \
  3. -e STORAGE_TYPE=mysql \
  4. -e MYSQL_HOST=127.0.0.1 \
  5. -e MYSQL_TCP_PORT=3306 \
  6. -e MYSQL_DB=zipkin \
  7. -e MYSQL_USER=root \
  8. -e MYSQL_PASS=123456 \
  9. openzipkin/zipkin

3.4、seata安装

https://blog.csdn.net/su2231595742/article/details/124515517?spm=1001.2014.3001.5501

4、项目搭建

相关文章