SpringCloud 初始化父子项目并集成 Consul 服务发现
准备工作
- IDEA2020.1
- JDK1.8
- Spring Cloud版本:Hoxton.SR5
- Spring Boot 版本:2.3.0.RELEASE
安装Consul
- windows安装:https://www.yuque.com/ekko/ap...
- Mac安装:https://www.yuque.com/ekko/ap...
开始
简介:consul的功能
- 服务发现
- Key/Value存储
- 健康检查
今天我们主要来学习实践服务发现功能
先到 https://start.spring.io/ 初始化一个父项目
生成之后解压,先用IDE编辑文件修改pom.xml,如下图,在底部 标签下切换国内阿里源
aliyun
aliyun
https://maven.aliyun.com/repository/public
true
false
spring-milestones
Spring Milestones
https://maven.aliyun.com/repository/spring
true
false
保存,然后使用 IDEA 打开,等Maven加载完毕
新建子项目
右击项目名称,New -> Module
下一步选择包,先跳过,点击Finish
完成
关联父子项目
在父 Module
的pom.xml
中的
标签上部新增
pro-service
如图示
在子项目 pro-service
中的
标签后追加
com.github.springtools
SpringCloudPro
0.0.1
到这里会发现Maven
找不到一些Spring Boot
的依赖
在父项目增加管理依赖版本号的定义
最终的父项目pom.xml
4.0.0
com.github.springtools
SpringCloudPro
0.0.1
SpringCloudPro
父项目
pom
1.8
Hoxton.SR5
2.3.0.RELEASE
pro-service
org.springframework.cloud
spring-cloud-starter-consul-config
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
aliyun
aliyun
https://maven.aliyun.com/repository/public
true
false
spring-milestones
Spring Milestones
https://maven.aliyun.com/repository/spring
true
false
子项目pom.xml
4.0.0
com.github.springtools
SpringCloudPro
0.0.1
pro-service
0.0.1
pro-service
业务模块
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin
项目结构图
集成服务发现 Consul
父项目添加如下依赖,在上述的最终父项目pom.xml
中已经加过了,这里简要说明
在pro-service
中的resources
目录下,删除自带的application.properties
,新增bootstrap.yml
因为后续的config
要用到,bootstrap
比application.properties
加载优先级别高
## 完善子项目并注册到 Consul
bootstrap.yml
spring:
application:
name: pro-service
cloud:
consul:
discovery:
health-check-path: /actuator/health # 检测实例健康
health-check-interval: 10s # 每隔10s检查
hostname: localhost # 配置实例地址
register: true # 自动注册
service-name: ${spring.application.name} # 实例名称
host: localhost
port: 8500
ps:这里的spring.application.name
与spring.cloud.consul.discovery.service-name
一定要加,不然会抛出异常
Caused by: java.lang.IllegalArgumentException: Consul service ids must not be empty, must start with a letter, end with a letter or digit, and have as interior characters only letters, digits
-- 参考:https://www.jianshu.com/p/83d3a8105620
定义启动类 ProServiceApplication.java
package com.github.springtools.proservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class ProServiceApplication {
@GetMapping("/")
public String hello() {
return "Hello world";
}
public static void main(String[] args) {
SpringApplication.run(ProServiceApplication.class, args);
}
}
启动
好了,今天就先写到这里了
源代码地址
https://github.com/Gleans/SpringCloudPro
ps:写着写着又凌晨一点了,头发又少了,一天天儿~的过得也太快了,淦