微服务项目代码说明

微服务项目代码说明

精选文章moguli202025-01-13 10:53:1399A+A-

这个项目中基本完成了微服务所需的大部分组件。

代码地址:https://gitee.com/fzh-oschina/tinem


环境依赖

  1. docker [19+]
  2. jdk [1.8+]
  3. redis [5.0+] [单机/cluster]
  4. mysql [5.7+] [单机]
  5. jaeger [1.18+]
  6. nacos [1.2.1+][单机/cluster]
  7. sentinel [1.6.3+]
  8. maven [3.5.0+]
  9. seata [1.4.2+]

数据库

  1. 微服务默认数据文件
platform-doc/数据库文档/platform.chnr.json

此文件需要使用第三方工具打开:http://www.pdmaner.com/

打开后导出sql即可


  1. 分布式事务数据库脚本
platform-doc/数据库文档/seata.sql
  1. 唯一id数据库脚本
platform-doc/数据库文档/uid.sql


启动环境变量配置

export JAEGER_HOST=10.20.10.21
export JAEGER_HTTP_URL="http://10.20.10.21:14268/api/traces"
export LOG_ELASTICSEARCH_HOST="http://elasticsearch.xxx.com/_bulk"
export NACOS_CONFIG_SERVERS="10.20.10.21:8848,10.20.10.22:8848,10.20.10.23:8848"
export NACOS_DISCOVERY_SERVERS="10.20.10.21:8848,10.20.10.22:8848,10.20.10.23:8848"
export SEATA_SERVICE="10.20.10.26:8091"

export SENTINEL_CLIENT_IP=${本机IP}
export SENTINEL_DASHBOARD="10.20.10.26:8858"

export PLATFORM_MYSQL_SERVER_HOST=10.20.10.21
export PLATFORM_MYSQL_SERVER_PASSWORD="password"
export UID_MYSQL_SERVER_HOST=10.20.10.21
export UID_MYSQL_SERVER_PASSWORD="password"
export REDIS_SERVER_HOST_1=10.20.10.21
export REDIS_SERVER_HOST_2=10.20.10.22
export REDIS_SERVER_HOST_3=10.20.10.23
export REDIS_SERVER_HOST_4=10.20.10.24
export REDIS_SERVER_HOST_5=10.20.10.25
export REDIS_SERVER_HOST_6=10.20.10.26

多模块

在实际的公司中往往有不止一个项目的开发和运营。而大部分的项目可能业务方面完全没有联系。通过多模块化的结构。我们将此微服务项目拆分成了微服务主体结构和业务项目。在微服务主体结构中我们将与业务无关的功能再次拆分成了单独的模块。例如网络模块,安全模块,数据模块等通用服务。为我们的业务开发提供基础支持。而通过标准化的模块方式我们所有的项目入口统一由gateway负责。


统一配置

多模块导致我们的项目有很多共同的配置文件如nacos地址,redis地址等。如果每个项目单独管理这些配置会导致我们的配置文件冗余,难以维护等。所以我们通过maven插件将统一的配置文件放到一个项目中,在maven编译期通过项目配置信息生成不同的配置文件。

目前通过统一配置的数据有

  1. jpa配置
  2. redis
  3. springboot banner信息
  4. 项目配置信息
  5. sentinel
  6. nacos
  7. jaeger
  8. logback
  9. ribbon
  10. feign
  11. docker


例如我们的短连接服务。在项目中仅配置部分数据但在maven编译后会将全局配置文件生成出来。

在项目中使用统一配置文件



            <plugin>                <!-- 共享配置文件 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.7.0</version>
                <executions>
                    <execution>
                        <id>process-remote-resources</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <resourceBundles>
                                <resourceBundle>com.tinem:platform-config:${project.version}</resourceBundle>
                            </resourceBundles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>


容器化

maven的容器化插件:com.spotify:dockerfile-maven-plugin:1.4.13

pom.xml

docker配置文件:

platform-config/src/main/resources/Dockerfile.vm

这个容器使用了alibaba的jdk17,默认设置的时区为上海,内存大小为512。开启jvm异常退出时内存dump文件。

唯一id生成器

采用了百度的唯一id生成器并进行了一些改动。支持id映射防止数据被爬取。

分布式事务

alibaba seata

官网:https://seata.io/zh-cn/index.html

安装:Seata分布式事务的使用与在K8S上的部署

注册中心&配置中心

alibaba nacos

官网:https://nacos.io/zh-cn/

安装:K8S上搭建微服务注册中心nacos集群

流量治理

alibaba Sentinel

官网:https://sentinelguard.io/zh-cn/docs/introduction.html

安装:K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

调用链追踪

jaeger

官网:https://www.jaegertracing.io/

安装:在k8s上搭建微服务链路追踪,并将数据存储到ES

日志管理

日志是通过logback管理。将日志分为两部分同时记录。

  1. 文件存储

将日志文件按照每天每个文件最大100M的规则保留30天内的日志文件策略。

platform-config/src/main/resources/logback-boot.xml.vm
  1. Elasticsearch存储

es存储使用了logback的插件:logback-elasticsearch-appender

此方案有部分问题。会占用内存。可能会丢失日志。如果丢失日志的话需要通过本地日志文件来查找丢失的日志

# pom.xml
		<!-- 日志 -->
		<dependency>
			<groupId>com.internetitem</groupId>
			<artifactId>logback-elasticsearch-appender</artifactId>
			<version>${logback-elasticsearch-appender}</version>
		</dependency>

Elasticsearch kibana

官网:https://www.elastic.co/cn/

安装:Kubernetes 中搭建Elasticsearch集群


模块介绍 platform-cloud-web-auth

这是微服务中的授权模块。通过spring-security-oauth2模块完成。微服务的所有调用从这里开始。获取jwt后传入网关调用服务。并且对接了第三方登录如企业微信。微信等等。

模块介绍 platform-cloud-web-file

文件上传服务。通过jwt找到对应渠道将文件存储到服务器并返回url。

模块介绍 platform-cloud-web-gateway

使用spring cloud gateway 做的微服务网关。实现了:jwt鉴权,流量控制,参数验证,日志记录,防重复,统一状态码,报文加签加密等。

模块介绍 platform-cloud-web-link

短连接服务

模块介绍 platform-cloud-web-tool

一些工具类,生成唯一id,解析jwt,ip定位等。

模块介绍 platform-cloud-service-channel

渠道服务

模块介绍 platform-cloud-service-data

数据服务如行政区域,星座列表,翻译等

模块介绍 platform-cloud-service-graphql

graphql

模块介绍 platform-cloud-service-link

短连接服务,生成短连接,短连接事件监控。

模块介绍 platform-cloud-service-message

消息服务。邮件,mqtt消息推送等

模块介绍 platform-cloud-service-network

网络服务。ip定位,翻译等

模块介绍 platform-cloud-service-security

安全服务,图片验证码,邮箱,手机验证码。数据加密服务

模块介绍 platform-cloud-service-task

定时任务。清理es数据,清理数据库数据等

模块介绍 platform-cloud-service-user

用户服务

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2