Consul入门--Window
一 Consul安装
1.打开官网,选择window版本下载
http://2v7740o742.vicp.fun:2024/upload/2025/08/to072p2ngqg1dol31uc7g3s26s.zip

2.解压压缩包,在Consul解压目录下打开cmd,输入consul agent -dev,启动consul

二 Consul在Java的应用
建立两个Java项目,一个作为生产者,一个作为消费者
(一)生产者
1.导入consul的依赖

<?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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <!-- Spring Boot 2.7.x 是 JDK8 最后支持的版本 --> <version>2.7.18</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo1</name> <description>demo1</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.9</spring-cloud.version> </properties> <!-- 引入 Spring Cloud 依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Web 模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Consul Discovery --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <!-- Consul Config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <!-- 测试模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.在application.yml文件下配置consul

spring: application: name: Provider config: import: "optional:consul:" cloud: consul: host: localhost port: 8500 discovery: register: true health-check-url: /actuator/health heartbeat: enabled: true config: enabled: true server: port: 8081
3.创建SpringBoot配置类

package com.example.demo; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @ConfigurationProperties(prefix = "server") public class ServerConfig { private int port; public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
4.使用配置

package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class ApiController { private final ServerConfig serverConfig; public ApiController(ServerConfig serverConfig) { this.serverConfig = serverConfig; } @GetMapping("/port") public String getPort() { return "Server port is: " + serverConfig.getPort(); } }
5.在启动类上加入注解@EnableDiscoveryClient

package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class Demo1Application { public static void main(String[] args) { SpringApplication.run(Demo1Application.class, args); } }
6.在Consul服务启动下,运行项目,打开网址http://localhost:8500/ui/dc1/services,生产者部分完成

(二) 消费者
1.导入consul的依赖

<?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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <!-- Spring Boot 2.7.x 是 JDK8 最后支持的版本 --> <version>2.7.18</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo2</name> <description>demo2</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.9</spring-cloud.version> </properties> <!-- 引入 Spring Cloud 依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Web 模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Consul Discovery --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <!-- Consul Config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入junit单元测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.在application.properties文件下配置consul

server.port=8015 spring.application.name=Consumer spring.cloud.consul.host=localhost spring.cloud.consul.port=8500 #把服务注册到注册中心 spring.cloud.consul.discovery.register=true spring.cloud.consul.discovery.health-check-url=/actuator/health spring.cloud.consul.discovery.heartbeat.enabled=true management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always spring.config.import=optional:consul: spring.cloud.consul.config.enabled=true
3.在启动类上加入注解@EnableDiscoveryClient

package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; //该注解用于向使用consul或zookeeper作为注册中心时注册服务 @EnableDiscoveryClient @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
4.创建测试类,测试consul


package com.example.demo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest public class DemoApplicationTests { @Autowired private LoadBalancerClient loadBalancer; @Autowired private DiscoveryClient discoveryClient; private String serviceName = "Provider"; @Test public void contextLoads() { ServiceInstance serviceInstance = loadBalancer.choose(serviceName); String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/api/port", String.class); System.out.println("callServiceResult = " + callServiceResult); } }
5.在Consul服务启动下,运行项目,打开网址http://localhost:8500/ui/dc1/services,消费者部分完成

浙公网安备 33010602011771号