1.Consul 使用
首先创建一个服务提供者 consul-provider。新建一个 Spring Boot 项目,添加如下依赖:

项目创建成功后,application.properties 添加如下配置:
spring.application.name=consul-provider server.port=2000 # Consul 相关配置 spring.cloud.consul.host=192.168.1.111 #写自己的ip spring.cloud.consul.port=8500 spring.cloud.consul.discovery.service-name=consul-provider spring.cloud.consul.discovery.heartbeat.enabled=true
|
项目启动类上面开启服务发现功能:
@SpringBootApplication @EnableDiscoveryClient public class ConsulProviderApplication { public static void main(String[] args) { SpringApplication.run(ConsulProviderApplication.class, args); } }
|
最后创建测试接口:
@RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "hello"; } }
|
启动项目,访问 consul 后台管理页面,看到如下信息,表示已经成功。

2. Consul 集群注册
为了区分集群中的哪一个 provider 提供的服务,修改一下 consul 的接口:
@RestController public class HelloController { @Value("${server.port}") Integer port; @GetMapping("/hello") public String hello(){ return "hello>>"+port; } }
|
然后对项目进行打包,命令行执行下列命令,启动两个 provider 实例:
java -jar consul-provider-0.0.1-SNAPSHOT.jar --server.port=2000 java -jar consul-provider-0.0.1-SNAPSHOT.jar --server.port=2001
|
启动成功后,再去访问 consul 后台管理页面,就可以看到两个实例了:

3. 消费
首先创建一个消费实例 consul-consumer,和 provider 一致。
创建成功后,添加如下配置:
spring.application.name=consul-consumer server.port=2002 spring.cloud.consul.host=192.168.1.111 spring.cloud.consul.port=8500 spring.cloud.consul.discovery.service-name=consul-consumer spring.cloud.consul.discovery.heartbeat.enabled=true
|
开启服务发现,并添加 RestTemplate:
@SpringBootApplication @EnableDiscoveryClient public class ConsulConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsulConsumerApplication.class, args); } @Bean RestTemplate restTemplate(){ return new RestTemplate(); } }
|
最后,提供调用方法:
@RestController public class HelloController { @Autowired LoadBalancerClient loadBalancerClient; @Autowired RestTemplate restTemplate; @GetMapping("/hello") public void hello(){ ServiceInstance choose = loadBalancerClient.choose("consul-provider"); System.out.println("服务地址:"+ choose.getUri()); System.out.println("服务名称:"+choose.getServiceId()); String s = restTemplate.getForObject(choose.getUri()+"/hello", String.class); System.out.println(s); } }
|
最后启动项目,浏览器输入: http://localhost:2002/hello 查看结果,这个请求自带负载均衡功能。
项目示例地址:https://github.com/astronger/springcloud-simple-samples