这个项目中基本完成了微服务所需的大部分组件。
代码地址:
https://gitee.com/fzh-oschina/tinem此文件需要使用第三方工具打开:http://www.pdmaner.com/
打开后导出sql即可
分布式事务数据库脚本platform-doc/数据库文档/seata.sql唯一id数据库脚本platform-doc/数据库文档/uid.sql在实际的公司中往往有不止一个项目的开发和运营。而大部分的项目可能业务方面完全没有联系。通过多模块化的结构。我们将此微服务项目拆分成了微服务主体结构和业务项目。在微服务主体结构中我们将与业务无关的功能再次拆分成了单独的模块。例如网络模块,安全模块,数据模块等通用服务。为我们的业务开发提供基础支持。而通过标准化的模块方式我们所有的项目入口统一由gateway负责。
多模块导致我们的项目有很多共同的配置文件如nacos地址,redis地址等。如果每个项目单独管理这些配置会导致我们的配置文件冗余,难以维护等。所以我们通过maven插件将统一的配置文件放到一个项目中,在maven编译期通过项目配置信息生成不同的配置文件。
目前通过统一配置的数据有
jpa配置redisspringboot banner信息项目配置信息sentinelnacosjaegerlogbackribbonfeigndocker例如我们的短连接服务。在项目中仅配置部分数据但在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.xmldocker配置文件:
platform-config/src/main/resources/Dockerfile.vm这个容器使用了alibaba的jdk17,默认设置的时区为上海,内存大小为512。开启jvm异常退出时内存dump文件。
采用了百度的唯一id生成器并进行了一些改动。支持id映射防止数据被爬取。
alibaba seata
官网:
https://seata.io/zh-cn/index.htmlalibaba nacos
官网:https://nacos.io/zh-cn/
alibaba Sentinel
官网:
https://sentinelguard.io/zh-cn/docs/introduction.html安装:K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置
jaeger
官网:
https://www.jaegertracing.io/日志是通过logback管理。将日志分为两部分同时记录。
文件存储将日志文件按照每天每个文件最大100M的规则保留30天内的日志文件策略。
platform-config/src/main/resources/logback-boot.xml.vmElasticsearch存储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集群
这是微服务中的授权模块。通过spring-security-oauth2模块完成。微服务的所有调用从这里开始。获取jwt后传入网关调用服务。并且对接了第三方登录如企业微信。微信等等。
文件上传服务。通过jwt找到对应渠道将文件存储到服务器并返回url。
使用spring cloud gateway 做的微服务网关。实现了:jwt鉴权,流量控制,参数验证,日志记录,防重复,统一状态码,报文加签加密等。
短连接服务
一些工具类,生成唯一id,解析jwt,ip定位等。
渠道服务
数据服务如行政区域,星座列表,翻译等
graphql
短连接服务,生成短连接,短连接事件监控。
消息服务。邮件,mqtt消息推送等
网络服务。ip定位,翻译等
安全服务,图片验证码,邮箱,手机验证码。数据加密服务
定时任务。清理es数据,清理数据库数据等
用户服务