852D6P 发表于 2025-2-22 10:54:36

nacos(六): 创建第一个多模块微服务项目(生产者与消费者)

要创建出生产者与消费者一体的多模块项目,总体来说分成三个步骤。分别是先创建出项目主体,再分别创建出生产者与消费者。
 
步骤一:创建项目主体
1. 先创建一个单体项目作为项目的主题。在这里,我们不用脚手架,通过IDEA的向导直接进行创建。根据下图进行新建项目的配置:

 
 2. 然后点击下一击,选择版本与依赖项:

 
3. 在生成的主项目中,只保留pom.xml,其余的文件可以全部删掉:

 
4. 将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>    <modules>      <module>producer</module>      <module>consumer</module>    </modules>      <groupId>com.example</groupId>    <artifactId>alibabanacos</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>alibabanacos</name>    <description>alibabanacos</description>    <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.7.6</spring-boot.version>      <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>    </properties>    <dependencies>      <!--springboot-->      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>      </dependency>      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>      </dependency>      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>      </dependency>    </dependencies>    <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>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>    <build>      <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.8.1</version>                <configuration>                  <source>1.8</source>                  <target>1.8</target>                  <encoding>UTF-8</encoding>                </configuration>            </plugin>      </plugins>    </build></project>
其中,有几个配置节需要注意:
<modules>配置节代表着后面要创建的子模块的名称;
<packaging>配置节代表打包方式,因为主项目只有一个pom.xml,主要是协调和管理子项目,所以无需打包改为pom即可。
 
步骤二:创建生产者producer
1. 在主项目下新建producer模块:



 
2. 在main包下面创建出resources文件夹:

 
3. 在producer下创建target文件夹:

 
4. 之后如下修改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.example</groupId>      <artifactId>alibabanacos</artifactId>      <version>0.0.1-SNAPSHOT</version>    </parent>    <packaging>jar</packaging>    <artifactId>producer</artifactId>    <description>producer</description>    <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.7.6</spring-boot.version>    </properties>    <dependencies>      <!--springboot-->      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>      </dependency>      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>      </dependency>      <!-- 服务发现(生产者)-->      <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>      </dependency>    </dependencies>    <build>      <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.8.1</version>                <configuration>                  <source>1.8</source>                  <target>1.8</target>                  <encoding>UTF-8</encoding>                </configuration>            </plugin>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <version>${spring-boot.version}</version>                <configuration>                  <mainClass>com.example.producer.ProducerApplication</mainClass>                  <skip>false</skip>                </configuration>                <executions>                  <execution>                        <id>repackage</id>                        <goals>                            <goal>repackage</goal>                        </goals>                  </execution>                </executions>            </plugin>      </plugins>    </build></project>
 
5. 在启动类上添加@EnableDiscoveryClient注解

 
6.  在resources资源目录下添加application.yml文件

并在文件中添加如下配置:
server:port: 8085spring:cloud:    nacos:      discovery:      server-addr: 127.0.0.1:8848      username: nacos      password: nacos      config:      server-addr: 127.0.0.1:8848      username: nacos      password: nacos      namespace: public    loadbalancer:      nacos:      enabled: trueapplication:    name: product
到这里对生产者的配置已经完成,这时启动生产者,即可在nacos后台的服务列表中看到product实例:

 
 
步骤三:创建消费者consumer
总体步骤和生产者创建几乎一致,不同的地方在于以下几个方面:
1. 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.example</groupId>      <artifactId>alibabanacos</artifactId>      <version>0.0.1-SNAPSHOT</version>    </parent>    <artifactId>consumer</artifactId>    <packaging>jar</packaging>    <dependencies>      <!--springboot-->      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>      </dependency>      <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>      </dependency>      <!-- 服务发现(生产者)-->      <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>      </dependency>      <!--消费者-->      <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-loadbalancer</artifactId>            <version>3.1.5</version>      </dependency>    </dependencies>    <build>      <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.8.1</version>                <configuration>                  <source>1.8</source>                  <target>1.8</target>                  <encoding>UTF-8</encoding>                </configuration>            </plugin>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <version>${spring-boot.version}</version>                <configuration>                  <mainClass>com.example.consumer.ConsumerApplication</mainClass>                  <skip>false</skip>                </configuration>                <executions>                  <execution>                        <id>repackage</id>                        <goals>                            <goal>repackage</goal>                        </goals>                  </execution>                </executions>            </plugin>      </plugins>    </build></project>
 
2. application.yml
server:port: 8086spring:cloud:    nacos:      discovery:      server-addr: 127.0.0.1:8848      username: nacos      password: nacos      config:      server-addr: 127.0.0.1:8848      file-extension: properties      username: nacos      password: nacos    loadbalancer:      nacos:      enabled: trueapplication:    name: consumer
具体消费者如何通过loadbalance调用生产者提供的服务,可以参考《nacos(四): 创建第一个消费者Conumer(单体)》。
 
最终成果:整个项目的工程目录结构基本如下

 
本文到这里就完成了。下一篇,我们将一起关注网关gateway的使用: )
 
页: [1]
查看完整版本: nacos(六): 创建第一个多模块微服务项目(生产者与消费者)