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

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

根据要求将新生电子报道系统由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、模块划分

electronic-registration-cloud
├── erc-admin    -- 业务:管理员模块 [8005]
├── erc-common   -- 系统公共模块
├── erc-data     -- 业务:大屏模块 [9001]
├── erc-gateway  -- Spring Cloud Gateway网关 [9527]
├── erc-monitor  -- Spring Boot Admin 服务状态监控 [8769]
├── erc-openid   -- 业务:微信模块[8003]
├── erc-praise   -- 业务:喜报模块 [8004]
├── erc-healthinfo   -- 业务:健康码模块[8006]
└── 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. 搜索镜像
docker search sentinel-dashboard

# 2. 拉取镜像
docker pull bladex/sentinel-dashboard

# 3. 查看端口
docker inspect sentinel-dashboard
发现默认暴露端口为8719、8858

# 4. 启动
docker run --name sentinel -d -p 8858:8858 -p 8719:8719 -d bladex/sentinel-dashboard

3.3、Zipkin

docker方式安装

docker search zipin

docker pull openzipkin/zipkin

docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin

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

curl -sSL https://zipkin.io/quickstart.sh | bash -s

java -jar zipkin.jar

使用mysql实现数据持久化

1、创建mysql数据环境

CREATE TABLE IF NOT EXISTS zipkin_spans (
    `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
    `trace_id` BIGINT NOT NULL,
    `id` BIGINT NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    `parent_id` BIGINT,
    `debug` BIT(1),
    `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
    `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';

CREATE TABLE IF NOT EXISTS zipkin_annotations (
    `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
    `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
    `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
    `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
    `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
    `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
    `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
    `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
    `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
    `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
    `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';

CREATE TABLE IF NOT EXISTS zipkin_dependencies (
    `day` DATE NOT NULL,
    `parent` VARCHAR(255) NOT NULL,
    `child` VARCHAR(255) NOT NULL,
    `call_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

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

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方式

docker run --name zipkin -d \
-p 9411:9411 \
-e STORAGE_TYPE=mysql \ 
-e MYSQL_HOST=127.0.0.1 \
-e MYSQL_TCP_PORT=3306 \ 
-e MYSQL_DB=zipkin \
-e MYSQL_USER=root \
-e MYSQL_PASS=123456 \
openzipkin/zipkin

3.4、seata安装

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

4、项目搭建

相关文章