从0开始搭建一个微服务项(并注册到nacos)

AILLLLLJ / 2023-05-03 / 原文

本文发布时间:2023-05-03

本文旨在分享开始一个微服务项目时结构的搭建过程,只提供一种微服务项目的结构,并不涉及具体的业务逻辑。

尚在学习当中,如有不足,请指正!!!

项目架构

创建模块

父工程模块——cloud-parent

一个微服务项目最好有一个父工程模块,用来对整个项目的依赖统一管理

在我的demo中对其命名为cloud-parent,创建好这个模块后,删除除pom.xml之外的文件。

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>
    <groupId>com.ailj</groupId>
    <artifactId>cloud-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloud-parent</name>
    <description>cloud-parent</description>
<!--    父工程打包方式为pom-->
    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--        版本最好和此一致,否则会有兼容性问题,此处版本经测试确保可用-->
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
    </properties>
    
<!--    使用dependencyManagement统一依赖管理-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement
</project>

微服务模块——cloud-goods

此模块为商品服务的父模块,继承cloud-parent模块,也包括cloud-goods-api等子模块。

创建模块后,只保留pom.xml文件

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>
    <artifactId>cloud-goods</artifactId>

    <parent>
        <groupId>com.ailj</groupId>
        <artifactId>cloud-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
<!--        指定父模块pom.xml路径,默认为../pom.xml,即父工程的pom.xml文件位于当前目录下-->
<!--        此处cloud-parent和cloud-goods同属于一个目录,所以需指定路径-->
        <relativePath>../cloud-parent/pom.xml</relativePath>
    </parent>
<!--    父工程模块打包方式为pom-->
    <packaging>pom</packaging>

    <modules>
        <module>cloud-goods-api</module>
    </modules>

</project>

relativePath标签通俗的解释:如果子工程在父工程文件夹下,则可以不加;若子工程和父工程同级或位于其他路径,则需要加此标签指定路径。

微服务子模块——cloud-goods-api

cloud-goods-api模块是商品微服务的一个子模块,在cloud-goods模块中也可包含其他如service、model模块,此处只创建一个api模块以作示例。

cloud-goods-api模块相当于单体项目中的controller层,所以目录结构需保留。

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>
    <parent>
        <groupId>com.ailj</groupId>
        <artifactId>cloud-goods</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>cloud-goods-api</artifactId>
    <dependencies>
        <!--cloud的基础环境包-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        nacos服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        
    </dependencies>
</project>

还是要提醒依赖版本问题,否则会有一大堆问题出现(来自某个被折磨一下午的**的忠告)

创建bootstrap.yml文件

首先简要介绍bootstrap.yml和applicatin.yml的区别:

  1. bootstrap.yml先加载,application.yml后加载

  2. bootstrap.yml由spring cloud上下文配置加载,application.yml由spring boot配置加载

  3. bootstrap.yml配置系统信息,如服务地址,application.yml配置应用信息,如自定义参数

具体信息可自行百度

bootstrap.yml文件中代码

server:
  port: 9000	#端口号,可自定义
spring:
  cloud:
    nacos:
      server-addr: {自己的nacosip地址}
      discovery:
        namespace: {自己的nacos命名空间}
        group: {自己的组名}	#通常用于区分项目
  application:
    name: goods-api	#服务名称
  profiles:
    active: dev	#运行环境(开发环境)

其他

启动类中不需要配置其他注解,在bootstrap.yml中指定了地址就可以注册到nacos。

最后运行启动类

出现

即为成功。

多动手,多思考