写一下今年做的一个微服务架构,作为分享,如果你想使用但又有不明白的地方可以私信或评论,我看到了会及时回复。如果你又更好的想法可以改进我不足之处的,也非常欢迎在评论中提出来。
一、服务版本依赖解释
:: Spring Boot................... :: [ v2.6.13]
:: Dubbo......................... :: [ v2.7.13]
:: spring-cloud-starter-alibaba.. :: [ v2021.0.5.0]
:: nacos-client.................. :: [ v2.2.0]
搭建微服务架构最烦的就是版本依赖问题,查了官方提供的版本对应,我这里提供的版本已经实测可用,可以放心使用。
二、功能预览
部分基础功能已经实现,不需要重复开发。功能不多,但足够使用,省去你开发系统管理的时间岂不是很美哉。
1、登录注册
2、首页
3、系统管理
4、系统监控
5、操作日志
6、代码生成
这里的代码生成都是按照规范生成的,基本上建一个表,这里生成已经完成至少50%开发量。介绍一下,这里的代码生成我使用的是若依的生成组件,不过若依的生成模板被我抛弃了,我认为若依的模板生成的代码不够规范,所以自己写了模板,并经过我多次调试。可以直接使用。
三、后台服务要求。
按照微服务划分原则,基础版划分了一个总的服务端,和一个系统管理端。
1、环境要求
第一个JDK1.8版本,如果安装jdk自己百度,一大堆。
第二个安装redis
第三个你都用微服务了,maven私服不可少,装一个nexus,百度一大堆。
第四个安装nacos,nacos版本2.2.0,怎么安装也是自己百度,也是一大堆教程。
2、后台工程结构介绍
我主要说明一下我的系统管理端(hdx-system)是怎么搭建的,因为后面加上来的微服务都要像这样搭建,基本上会这一步就够了。
1)在idea中新建project,注意group和artiface,这里配置好,免得后面改又麻烦。这里建好后把src文件夹和其他不需要的都删了,只留一个pom.xml文件。为什么?
我们要用这个来做maven的依赖jar包版本的统一管理
最外层pom.xml内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.13</version>
</parent>
<groupId>com.hdx</groupId>
<artifactId>hdx-system</artifactId>
<version>1.0.0</version>
<name>hdx-system</name>
<description>hdx-system</description>
<properties>
<java.version>1.8</java.version>
</properties>
<modules>
<module>hdx-system-common</module>
<module>hdx-system-dao</module>
<module>hdx-system-biz</module>
<module>hdx-system-client</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.6.13</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.6.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.13</version>
</dependency>
<!-- nacos 2.0.3-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.13</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.5.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.5.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 解决dubbo2.7.13jar包冲突问题-->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.11</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.16</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- 工具包 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.4.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus public</name>
<url>http://192.168.0.23:8081/nexus/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Nexus Sites</name>
<url>http://192.168.0.23:8081/nexus/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus Snapshot</name>
<url>http://192.168.0.23:8081/nexus/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
我的工程结构,总的长这样
biz:启动类和代码实现类在这个模块,对外提供RPC调用接口的实现类都在这里,相当于这里是做业务实现的
client:这里是向dubbo中提供服务的,本着最小暴漏原则,这里只有一个接口,接口的实现在biz中
common:这里全是Java实体对象模型类,统一管理,遵循规范。
dao:这里是数据层,只存3个东西,调用数据库的DAO接口,和数据库表一一对应的实体DO类,以及mybatis的xml文件
四、源码获取
我已在gitee码云上开源,可以通过git命令拉取项目;如果你需要拉取源码,有三个工程需要拉取。
1、hdx-admin
git@gitee.com:hdxsoft/hdx-admin.git
https://gitee.com/hdxsoft/hdx-admin.git
2、hdx-system
git@gitee.com:hdxsoft/hdx-system.git
https://gitee.com/hdxsoft/hdx-system.git
3、ht-public(这是一个不可启动的jar包工程,里面封装了公共的工具类,因为是微服务的,有些公用的工具类不可能每个服务都要写一个,放在这里全工程通用,在pom中引一下jar包即可,需要将此工程打成jar包,推送到自己的maven库,有maven私服的推到私服更好。mvn clean install deploy)
git@gitee.com:hdxsoft/ht-public.git
https://gitee.com/hdxsoft/ht-public.git
五、工程启动
获取源码后要启动工程需要做什么?
1、安装nacos,将hdx-admin下sql文件夹下的nacos.sql导入到你自己本地nacos访问的数据库中,然后再nacos上改掉数据库连接信息和redis连接信息,改成自己的。
2、将hdx-admin下sql文件夹下的demo.sql导入到自己本地的数据库中,注意建立的数据的编码。
3、最好安装一个nexus私服。先将ht-publi打包推到仓库。
命令:mvn clean install deploy
再将system打包推送
再建admin打包推送
完成以上步骤就可以启动了。