Consul 通过 Raft 协议实现强一致性, 通过 Agent 进行分布式健康检查,能够减少服务端的心跳检测压力。
相对 Eureka Server 这种集中式心跳检测机制,和采用 P2P 复制模式,不能保证数据一致性,更具有优势。
Consul 采用 Go 语言编写,需要从Consul 官网 https://www.consul.io/downloads,下载版本。
这里consul版本为1.9.4最新版本,SpringCloud版本为2.4.4,采用多模块工程。
1、解压,切换到consul.exe文件目录,使用命令启动,
consul agent -dev
默认客户端访问接口为8500,浏览器中输入http://localhost:8500打开主界面。
2、编写一个日志服务,向 Consul 注册中心注册,
首先添加maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后启动类上添加注解:
@EnableDiscoveryClient
配置文件中:
server:
port: 8801
spring:
application:
name: logservice
cloud:
consul:
host: localhost
discovery:
service-name: logservice
开发一个API接口:
@RestController
public class LogServiceController {
@GetMapping("/log")
public String log() {
return "logservice";
}
}
3、启动日志服务
4、同样,开发一个订单服务,启动
5、观察Consul管理页面,http://localhost:8500/ui/dc1/services
6、在订单服务中引人Feign,调用日志服务。
maven添加feignclient依赖
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类增加注解:
@EnableFeignClients
编写FeignClient接口:
@FeignClient("logservice")
public interface LogServiceClient {
@GetMapping("/log")
String log();
}
编写API接口,
@RestController
public class OrderController {
@Resource
private LogServiceClient logServiceClient;
@GetMapping("order")
public String order() {
return logServiceClient.log();
}
}
7、测试http://localhost:8802/order,输出logservice字符串。