spring-cloud consul基础

78 阅读5分钟

1.什么是consul

Consul 是一种由HashiCorp开发的开源工具,由go语言开发,用于实现服务发现配置分布式系统的基础设施服务。它被设计用来帮助构建和管理现代分布式应用程序的核心组件之一。

Consul 提供了以下主要功能:

  1. 服务发现和健康检查: Consul 允许服务在整个分布式环境中进行注册和发现。服务可以注册到 Consul 中心节点,并使用 DNS 或 HTTP 接口让其他服务或客户端发现它们的位置和可用性。此外,Consul 还能定期检查服务的健康状态,以便及时发现和处理故障。
  2. KV 存储: Consul 提供了一个分布式的键值存储系统,可以用来存储动态配置、特征标志和其他元数据。这些数据可以通过简单的 HTTP API 进行读写,使得应用程序可以动态地获取和修改配置,而不需要重新部署。
  3. 安全服务通信: Consul 支持基于 TLS 的加密通信和服务间的安全连接。它可以生成和分发 TLS 证书,用于验证和加密服务之间的通信,从而提高整个系统的安全性。
  4. 多数据中心支持: Consul 被设计为支持跨多个数据中心的部署。它能够轻松地管理和维护分布式系统的多个实例,并确保跨数据中心的服务发现和通信。
  5. 分布式一致性: Consul 使用 Raft 协议来实现分布式一致性,确保数据的可靠性和一致性。这使得 Consul 在面对网络分区和节点故障时能够保持系统的稳定性和可用性。

2.下载和运行

下载地址:developer.hashicorp.com/consul/inst…

window系统下载其中的386版本

然后解压到相应文件夹后在consul.exe目录下打开cmd窗口查看是否安装对的版本

输入

consul -version

如果显示出版本号数据那么就是下载对了

启动 consul,输入

consul agent -dev

打开UI界面

浏览器输入localhost:8500 (端口号可以在consul官网中查询到)

打开后就能看到一个酷炫的服务注册中心了,其中consul打了绿色的勾勾

3.consul在springcloud中的应用:

1.项目配置

导入依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

可以自己设置版本号,建议去官网查查版本的对应关系,以防出现启动时版本冲突的问题

服务配置:

系统拆分之后,会产生大量的微服务。每个微服务都有其对应的配置文件yml。如果其中的某个配置项发生了修改,一个一个微服务修改会很麻烦。因此一套集中式的、动态的配置管理设施是必不可少的。从而实现一次修改,处处生效。

在resource中重新创建一个bootstrap.yml文件

bootstrap.yml 是 Spring Boot 应用程序中一个特殊的配置文件,它的作用在于提供应用程序的基础配置信息,主要用于以下几个方面:

  1. 加载顺序优先级高: bootstrap.yml 文件的加载顺序优先于 application.ymlapplication.properties 文件。这意味着在应用程序启动时,Spring Boot 首先加载并应用 bootstrap.yml 中的配置,然后再加载 application.ymlapplication.properties 中的配置。这种机制允许在应用程序启动之前配置一些基础设施相关的配置项,如连接配置、加密解密配置等。
  2. 配置外部化: bootstrap.yml 通常用于配置连接到远程配置服务器(如 Spring Cloud Config Server)的详细信息。这使得应用程序能够在启动时从远程服务器获取配置信息,例如数据库连接信息、服务端口等。通过这种方式,可以将应用程序的配置信息从代码中分离出来,实现了配置的外部化管理和集中化管理。
  3. Spring Cloud 集成: 当应用程序使用 Spring Cloud 框架时,bootstrap.yml 也用于配置注册中心的连接信息(例如 Consul、Eureka 等),从而使应用程序能够注册和发现其他微服务。此外,还可以配置分布式系统中的分布式配置管理,例如使用 Consul 作为配置中心,从而动态获取应用程序的配置信息。
  4. 特定环境的配置: bootstrap.yml 可以根据不同的环境(如开发、测试、生产)进行不同的配置。例如,可以在开发环境中使用本地的配置信息,而在生产环境中使用远程配置服务器的信息,以便实现灵活的部署和管理。

总之,bootstrap.yml 是用于在应用程序启动时加载并应用的特殊配置文件,主要用于配置连接信息、外部化配置和集成分布式系统的基础设施配置。

spring:
 application:
   name: cloud-payment-service  # 服务名,自定义
 cloud:
   consul:
     host: localhost
     port: 8500
     discovery:
       service-name: ${spring.application.name}
     config:
       #这个是配置文件名以-连接【consul的k-v存储用到】,例如:cloud-payment-service
       profile-separator: '-'#文件分割符
       format: YAML #指定为yaml形式配置

application.yml中在spring下一级加入

profiles:
 active: dev # 多环境配置加载内容,不写就是默认default配置

然后在consul UI界面中key/value界面中增加config/name-dev(name为yml文件中的值)/data

其中data值为yaml形式的

注意:yaml形式主义间隔符的使用

如果修改了data中的数据想要项目中及时更新可以在主启动类上加入 @RefreshScope注解,可以动态刷新配置

你也可以将其他服务添加至consul管理就可以实现服务之间的调用

例如

@RestController
public class OrderController {
//    private String paymentSrc_URL="http://localhost:8001";
    private String paymentSrc_URL="http://cloud-payment-service";

    @Resource
    private RestTemplate restTemplate;
    //使用httpclient调用pay模块的相关接口
    @GetMapping("/consumer/pay/add")
    public ResultData addOrder(PayDTO payDTO) throws IOException {
      return restTemplate.postForObject(paymentSrc_URL+"/pay/add",payDTO,ResultData.class);
    }
    @GetMapping("/consumer/pay/get/{id}")
    public ResultData getPayInfo(@PathVariable("id") Integer id) throws IOException {
        return restTemplate.getForObject(paymentSrc_URL+"/pay/get/"+id,ResultData.class,id);
    }
}

我们添加了一个cloud-payment-service服务进入,我们可以直接使用服务名进行使用 启动服务时记得将consul启动

只要consul中有这个服务我们就可以动态的调用从而实现多模块的分工