在SpringCloud中使用Consul

consul介绍

Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:

  • 服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
  • 健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
  • Key/Value存储 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
  • 多数据中心 Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.

Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施.
在这里插入图片描述

基础架构

Consul是一个分布式高可用的系统.
每个提供服务给Consul的阶段都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.
Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群.
你基础设施中需要发现其他服务的组件可以查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .
每个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求创建时.本地Consul Server转发请求到远程的数据中心并返回结果.

安装Consul

安装Consul,找到适合你系统的包下载他.Consul打包为一个’Zip’文件。官方下载地址:
consul下载

Consul启动

Consul启动
5.1 开发模式启动:

Windows启动:
consul.exe agent -dev
Linux启动:
nohup ./consul agent -dev &

5.2 生产环境模式启动:

Windows启动:
consul.exe agent -server -ui -bootstrap -client 0.0.0.0 -data-dir=~/consul/data
Linux启动:
nohup ./consule agent -server -ui -bootstrap -client 0.0.0.0 -data-dir=~/consul/data &

验证是否启动成功:
访问 http://localhost:8500 看到下边的页面则表示安装成功

服务提供端项目

添加Maven依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

编写启动类

@EnableDiscoveryClient
@SpringBootApplication
public class ProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

在application.properties中配置Consul

#服务器端口号
server.port=8080
#服务名称
spring.application.name=service-provider

#配置健康检查地址,Actuator组件提供了默认实现
spring.cloud.consul.discovery.health-check-path=/actuator/health
#配置Consul健康检查频率,也就是心跳频率
spring.cloud.consul.discovery.health-check-interval=10s

#配置的是发现中心Consul的主机地址,默认为localhost
spring.cloud.consul.host=localhost
#配置的是发现中心Consul的主机端口,默认为8500
spring.cloud.consul.port=8500
#配置启动是否注册服务,默认为true,也可以不配置
spring.cloud.consul.discovery.register=true
#配置Spring Boot服务的主机地址,也可以不进行配置,默认本机地址
spring.cloud.consul.discovery.hostname=localhost
#配置Spring Boot服务的主机端口,也可以不进行配置,默认本机端口
spring.cloud.consul.discovery.port=8080
#配置Consul注册的服务名称,默认是${spring.application.name}变量是
spring.cloud.consul.discovery.service-name=${spring.application.name}
#配置Consul注册服务的 Tags,设置为urlprefix-/serviceName的格式,是自动注册到集群中
spring.cloud.consul.discovery.tags=urlprefix-/${spring.application.name}
#配置Consul注册服务 ID
spring.cloud.consul.discovery.instanceId=${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}

@RestController
public class UserController {

    @Autowired
    private UserApi userApi;

    @RequestMapping("/user/list")
    public String list() {
        return "consumer: " + userApi.list();
    }
}

启动服务测试

http://localhost:8500

SpringCloud使用Consul作为配置中心

添加Maven依赖

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-config</artifactId>
    </dependency>

编写启动类

@EnableScheduling
@EnableDiscoveryClient
@SpringBootApplication
public class ConsulConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsulConfigApplication.class, args);
    }
}

在bootstrap中配置consul,文件名必须为bootstrap.properties/bootstrap.yml

#服务器端口号
server.port=8080
#服务名称
spring.application.name=consul-config

#配置健康检查地址,Actuator组件提供了默认实现
spring.cloud.consul.discovery.health-check-path=/actuator/health
#配置Consul健康检查频率,也就是心跳频率
spring.cloud.consul.discovery.health-check-interval=10s

#配置的是发现中心Consul的主机地址,默认为localhost
spring.cloud.consul.host=localhost
#配置的是发现中心Consul的主机端口,默认为8500
spring.cloud.consul.port=8500
#配置启动是否注册服务,默认为true,也可以不配置
spring.cloud.consul.discovery.register=true
#配置Spring Boot服务的主机地址,也可以不进行配置,默认本机地址
spring.cloud.consul.discovery.hostname=localhost
#配置Spring Boot服务的主机端口,也可以不进行配置,默认本机端口
spring.cloud.consul.discovery.port=8080
#配置Consul注册的服务名称,默认是${spring.application.name}变量是
spring.cloud.consul.discovery.service-name=${spring.application.name}
#配置Consul注册服务的 Tags,设置为urlprefix-/serviceName的格式,是自动注册到Fabio集群中
spring.cloud.consul.discovery.tags=urlprefix-/${spring.application.name}
#配置Consul注册服务 ID
spring.cloud.consul.discovery.instanceId=${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}

#配置中心配置的应用名
spring.cloud.consul.config.default-context=${spring.application.name}
#配置中心的配置的格式
spring.cloud.consul.config.format=properties
#存储配置的顶层目录的前缀
spring.cloud.consul.config.prefix=config
#切换配置中心的配置环境的分隔符,即环境的分隔符
spring.cloud.consul.config.profile-separator=,
#存储配置内容的目录
spring.cloud.consul.config.data-key=my-data-key

#配置刷新的频率,单位毫秒
spring.cloud.consul.config.watch.delay=1000
#是否打开配置刷新,默认是打开的
spring.cloud.consul.config.watch.enabled=true

编写测试类

@RefreshScope
@RestController
public class ConfigController {
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;

    @RequestMapping("/config")
    public String config() {
        StringBuilder configs = new StringBuilder();
        configs.append("Consul配置:spring.datasource.url=" + url).append("<br>");
        configs.append("Consul配置:spring.datasource.username=" + username).append("<br>");
        configs.append("Consul配置:spring.datasource.password=" + password).append("<br>");
        return configs.toString();
    }
}

在服务器端进行配置

在这里插入图片描述
配置格式:
在这里插入图片描述
添加测试配置:
在这里插入图片描述

config/consul-config/my-data-key

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值