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/
@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 依赖:
#设置端口,防止冲突
server.port=9000
#为服务命名
spring.application.name=hangge-consumer
#指定服务注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
(3)主类上添加 @EnableDiscoveryClient 注解,让该应用注册为 Eureka 客户端应用,以获得服务发现的能力。同时,在该主类中创建 RestTemplate 的 Spring 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)