因为后续很多模块都要用到注册中心,所以此处先实现此模块。
Consul简介
Consul是一个开源的服务发现和配置管理工具,具有跨平台、运行高效等特点。它由HashiCorp公司开发,并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康检查、键值存储等功能。
Consul的核心功能
- 服务发现:Consul通过DNS或HTTP接口实现服务发现,允许开发人员轻松地注册、发现和注销服务,从而实现高可用和负载均衡。
- 健康检查:Consul具备强大的健康检查功能,可以监控服务的状态并根据设定的规则自动剔除故障节点。它支持多种健康检查方式,如TCP、HTTP、Docker容器等,确保服务的稳定性和可用性。
- 分布式一致性:Consul使用Raft算法作为其分布式一致性协议,确保在分布式环境下数据的一致性和可靠性。它实现了强一致性模型,能够处理网络分区、故障恢复等场景,保证系统的可靠性。
- 键值存储:Consul提供了一个简单但功能强大的键值存储接口,开发人员可以使用这个接口来存储和检索配置数据、共享状态信息等。它支持事务操作和ACL权限控制,为分布式系统的配置管理提供了便利。
Consul的主要应用场景
- 服务发现:作为注册中心,服务地址被注册到Consul中以后,可以使用Consul提供的DNS、HTTP接口查询。
- 服务隔离:Consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持TLS证书分发,service-to-service加密。
- 服务配置:Consul提供key-value数据存储功能,并且能将变动迅速地通知出去,通过工具consul-template可以更方便地实时渲染配置文件。
Consul还提供了丰富的配置选项和API接口,以满足不同的使用需求。它易于安装和部署,并且支持多种操作系统和平台。由于其强大的功能和灵活的配置选项,Consul已经成为许多分布式系统中不可或缺的一部分。
使用HomeBrew安装Consl
根据系统不同会有不同的安装方法,笔者是在macos下进行的的安装,所以安装方法如下,Consl软件可从地址: Consl软件包下载 下载。
安装
brew tap hashicorp/tap
brew install hashicorp/tap/consul
运行
consul --version
consul agent -dev
访问
打开网址 : http://localhost:8500
springcloud-consul-server模块
此模块实现向服务中心注册。
pom.xml
依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
application.properties配置
spring.profiles.active = dev
spring.application.name=springbootConsulServer
server.port=18093
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}
spring.cloud.consul.discovery.service-name
:表示在Consl中显示的服务标识名称,全局唯一。
SpringbootApplication启动类
添加 @EnableDiscoveryClient
服务发现注解
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.korgs", "cn.hutool.extra.spring"})
@Configuration
@EnableConfigurationProperties
@ServletComponentScan
@RestController
@EnableDiscoveryClient
public class SpringbootConsulServerApplication {
@Value("${server.port}")
private String serverPort;
public static void main(String[] args) {
SpringApplication.run(SpringbootConsulServerApplication.class, args);
}
@GetMapping("/helloworld")
public BaseResponse helloWorld(){
log.info(LogGenerator.trackLog()
+ "msg="+ "I am busy to handle this request.");
return BaseResponse.success("hello world");
}
}
Consul测试
启动Springboot服务,会在 http://localhost:8500
中看到如下界面:
源码下载
涉及模块:
- springcloud-consul-server:18093, 待注册的服务模块
源码下载:
- 基础框架源码下载
- Springboot 集成 Consul 实现服务注册中心
源码运行方法:
- 模块详细功能说明和运行测试方法