返回 导航

SpringBoot / Cloud

hangge.com

SpringCloud - 多模块项目的搭建教程(附多模块项目打包教程)

作者:hangge | 2020-11-23 08:10
    之前我演示了如何搭建一个多模块的 Spring Boot 项目(点击查看),本文接着介绍如何搭建一个多模块的 Spring Cloud 项目。这里的多模块,指的就是多个微服务组成一个项目,每一个微服务就可以看成一个模块(module),也就是说其实每一个微服务模块本身就是一个项目。
    整个项目包含三个模块:服务注册中心模块 eureka-server、服务提供者模块 hangge-service、服务消费者模块 hangge-consumer

1,创建父模块

(1)首先我们创建一个空的 Maven 项目作为父模块:

(2)创建后我们将 src 文件夹删除,因为父模块只做依赖管理,不需要编写代码。

2,创建服务注册中心子模块(eureka-server)

(1)右键点击父工程,选择 New -> Module... 创建子模块。

(2)选择创建一个 Spring Initializr 工程,名为 eureka-server

(3)创建时勾选上 Eureka Server 依赖:

(4)模块创建完毕后,编辑该模块的 application.properites 文件,添加如下相关配置:
#服务注册中心端口号
server.port=1111

#服务注册中心实例的主机名
eureka.instance.hostname=localhost
#表示是否将自己注册在EurekaServer上,默认为true。由于当前应用就是EurekaServer,所以置为false
eureka.client.register-with-eureka=false
#表示表示是否从EurekaServer获取注册信息,默认为true。单节点不需要同步其他的EurekaServer节点的数据
eureka.client.fetch-registry=false
#设置Eureka的地址
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

(5)然后在启动类上添加 @EnableEurekaServer 注解即可启动服务注册中心:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

(6)启动 EruekaServerApplication,访问 http://localhost:1111 可以看到如下图所示的 Eureka 的信息面板,说明注册中心启动成功:

3,创建服务提供者子模块(hangge-service)

(1)我们同样右键点击父工程,创建一个 Spring Initializr 模块工程,名为 hangge-service。同时创建时勾选上 Spring Web 以及 Eureka Discovery Client 依赖:

(2)模块创建完毕后,编辑该模块的 application.properites 文件,添加如下配置为服务命名,并指定服务注册中心的地址:
#为服务命名
spring.application.name=hangge-service
#指定服务注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

(3)在主类上添加 @EnableDiscoveryClient 注解,激活 Eureka 中的 DiscoveryClient 实现:
@SpringBootApplication
@EnableDiscoveryClient
public class HanggeProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(HanggeProviderApplication.class, args);
    }
}

(4)最后创建一个 Controller,提供个测试接口供后面消费者调用:
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "欢迎访问 hangge.com";
    }
}

(5)启动 HanggeProviderApplication,再次访问 Eureka 的信息面板,可以看到 hangge-provider 服务的注册信息: 

4,创建服务消费者子模块(hangge-consumer)

(1)我们同样右键点击父工程,创建一个 Spring Initializr 模块工程,名为 hangge-consumer。创建时除了勾选上 Spring Web Eureka Discovery Client 依赖,还需勾选上 Ribbon 依赖:

(2)模块创建完毕后,编辑该模块的 application.properites 文件,添加如下配置为服务命名,并指定服务注册中心的地址:
#设置端口,防止冲突
server.port=9000
#为服务命名
spring.application.name=hangge-consumer
#指定服务注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

(3)主类上添加 @EnableDiscoveryClient 注解,让该应用注册为 Eureka 客户端应用,以获得服务发现的能力。同时,在该主类中创建 RestTemplateSpring Bean 实例,并通过 @LoadBalanced 注解开启客户端负载均衡。
@SpringBootApplication
@EnableDiscoveryClient
public class HanggeConsumerApplication {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(HanggeConsumerApplication.class, args);
    }
}

(4)创建一个 ConsumerController 并实现 /hello-consumer 接口。在该接口中,通过前面定义的 RestTemplate 来实现对 HANGGE-SERVICE 服务提供的 /hello 接口进行调用:
@RestController
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/hello-consumer")
    public String helloConsumer() {
        // 通过服务名调用服务提供者的接口
        return restTemplate.getForEntity("http://HANGGE-SERVICE/hello", String.class).getBody();
    }
}

(5)启动 HanggeConsumerApplication,再次访问 Eureka 的信息面板,可以看到 hangge-consumer 服务的注册信息: 

(6)而使用浏览器访问 http://localhost:9000/hello-consumer 则显示如下内容,说明消费者调用服务提供者接口成功:

附:多模块项目打包教程

(1)编辑父工程 pom.xml 文件,将打包类型设置为 pom,并声明该父工程包含的子模块:
<?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
          http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 父模块打包类型必须为pom -->
    <packaging>pom</packaging>

    <!-- 模块说明:这里声明多个子模块 -->
    <modules>
        <module>eureka-server</module>
        <module>hangge-provider</module>
        <module>hangge-consumer</module>
    </modules>

    <!-- 版本说明:这里统一管理依赖的版本号 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>eureka-server</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>hangge-provider</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>hangge-consumer</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

(2)我们点击 IDEA 界面右侧的 Maven 面板 -> 选择父模块 -> Lifecycle -> package 进行打包:

(3)控制台输入如下内容则说明打包成功,我们在各个模块的 target 目录下便可以找到该模块的 jar 文件:
评论

全部评论(0)

回到顶部