1.1. 一、下载并允许consul。
下载consul的地址:https://www.consul.io/downloads.html
我下载windows版本,下载解压之后是一个consul.exe
二进制可执行文件。
1.2. 二、运行consul。
在consul.exe
所在目录执行下面的命令:
consul.exe agent -dev
就可以以开发者模式启动consul。访问http://localhost:8500/ 就可以看到consul的
web界面如下:
1.3. 三、查看consul集群。
启动另外一个命令窗口,执行下面的命令,可以查看consul的集群节点:
consul members
1.4. 四、springcloud服务注册到consul。
查看springcloud的consul官方文档,可以看到集成consul的方式。
新建一个springcloud项目,配置如下:
1.4.1. 1、配置依赖pom.xml。
pom.xml
中加入下面的配置。
<!--web服务器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--服务健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
1.4.2. 2、配置bootstrap.yml。
因为我们以后要使用 Spring Cloud Consul Config
作为配置中心。
所以把Consul的配置放在bootstrap.yml
,而不是application.yml
中。
bootstrap.yml
如下:
# 服务的端口
server:
port: 8080
# 服务的管理端口,就是/actuator/health等actuator使用的端口。
#一般不配置,默认跟随本服务的端口server.port就可以了。
management:
server:
port: 4452
spring:
application:
# 服务名
name: myTestService
cloud:
consul:
host: localhost
port: 8500
1.4.3. 3、访问consul界面如下:
会看到注册了2个服务myTestService
、myTestService-management
。
其中myTestService-management
是actuator管理界面的服务。
说明:
management.server.port
是定义actuator健康检查等一堆对微服务检查的端口。 一般默认为server.port
即可。如果定义为不同的端口去consul注册时, 这个微服务会注册为2个服务。服务名是spring.application.name
服务名后面加-management
。
详细情况可以查看springcloud的consul官网和springboot actuator的官网springboot actuator endpoints的官网。- 可以设置
spring.cloud.consul.discovery.enabled=false
或spring.cloud.discovery.enabled=false
禁用服务发现。 - 设置
spring.cloud.consul.discovery.register=false
禁用服务注册。 - 去掉
management.server.port
之后,只有一个服务注册到了consul,如下图:
1.4.4. 4、增加一个接口。给消费端。
@SpringBootApplication
@RestController
public class ConsulDemo1Application {
public static void main(String[] args) {
SpringApplication.run(ConsulDemo1Application.class, args);
}
@RequestMapping("/hello")
public String home() {
return "Hello world";
}
}