Spring Cloud Consul

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Spring Cloud Consul,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Consul简介

Consul 是一个分布式高可用的系统,它包含多个组件,但作为一个整体在微服务架构中提供服务发现和服务配置的工具。Spring Cloud Consul 项目是针对Consul的服务治理实现,是Eureka的替代方案,有比Consul跟全的功能:

  1. 服务发现
  2. 健康检查
  3. key/value 存储
  4. 多数据中心

Consul 角色

client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯。

在这里插入图片描述

1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port

2、Consul 接收到 Producer 的注册后,每隔10s(默认)会向 Producer 发送一个健康检查的请求,检验Producer是否健康

3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address

4、该临时表每隔10s会更新,只包含有通过了健康检查的 Producer

Spring Cloud Consul 项目是针对 Consul 的服务治理实现。Consul 是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中为我们的基础设施提供服务发现和服务配置的工具。

Consul与Eureka的区别
在这里插入图片描述

Spring Cloud 支持很多服务发现的软件,Eureka 只是其中之一,下面是 Spring Cloud 支持的服务发现软件以及特性对比:

在这里插入图片描述

Consul下载与安装

Consul下载官网

在这里插入图片描述
在这里插入图片描述
下载完成后解压到对应目录,目录下只有一个consul.exe的启动程序。

也可以通过doc命令启动,并配置一些参数:

//开发模式下监听任意地址的注册
consul agent -dev -client=0.0.0.0

Consul的后台管理界面的地址是:http://ip:8500

在这里插入图片描述
在这里插入图片描述
只能以开发者模式开启才能使用postman工具即可模拟注册与发现。

consul服务注册的地址是http://ip:8500/v1/catalog/register,请求方式是“put“`。

consul服务发现的地址是http://ip:8500/v1/catalog/services,请求方式是get

通过postman工具可以模拟服务的注册与发现过程。实际运用是,注册与发现地址隐藏了。

服务注册与发现

spring-boot-starter-actuator健康检查依赖于此包。

spring-cloud-starter-consul-discovery Spring Cloud Consul 的支持。

Consul还支持kv存储:

在这里插入图片描述

如何在consul上注册服务?

  1. 导入相关依赖
<!--spring cloud 提供对于consul服务发现的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    <version>2.2.8.RELEASE</version>
</dependency>

<!--actuator健康检查-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.6.6</version>
</dependency>



  1. 配置注册中心
# 服务注册到注册中心

# 服务名称
spring.application.name=bill-service

# 配置服务端口
server.port=8081

# consul的相关配置

# consul所在的服务器的ip地址
spring.cloud.consul.host=127.0.0.1

# consul所在的服务器的端口

spring.cloud.consul.port=8500

# consul服务器实例相关配置

# 是否将自己注册
spring.cloud.consul.discovery.register=true

# 实例id
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}

# 实例名称
spring.cloud.consul.discovery.service-name=${spring.application.name}

# 实例端口
spring.cloud.consul.discovery.port=${server.port}

# 是否指定ip注册
spring.cloud.consul.discovery.prefer-ip-address=true

# 当前服务的ip地址
spring.cloud.consul.discovery.ip-address=127.0.0.1

  1. 启动Consul服务器
    在这里插入图片描述
  2. 启动服务

在这里插入图片描述

启动服务注意别忘了在启动类上加@EnableDiscoveryClient注解。启动时还遇到了一个小错误Failed to introspect Class org.springframework.cloud.context.properties.ConfigurationPropertiesBean
5. 查看服务

在这里插入图片描述
服务已成功注册到注册中心。

相关配置详解

# 直接指定服务的 consul service id(即 instance id).
# 默认情况下为 spring.application.name + server.port, 如果在多个服务器上同一个服务, 因为应用名和端口都一致, 会导致service id 会重复, 所以一般情况都需要引入一个随机数避免重复 . 
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${random.value}

# 指定服务的 consul service name 
spring.cloud.consul.discovery.service_name=some_name

# consul 服务器主机名 
spring.cloud.consul.discovery.hostname=your_host

# consul 服务器端口
spring.cloud.consul.discovery.port=8500

# 维护 tags
$ 下面示例的 tag map 是:  foo->bar 和 baz->baz
spring.cloud.consul.discovery.tags:foo=bar, baz

# 是否启用服务发现 
spring.cloud.consul.discovery.enabled=true 

# 使用 consul 服务器 IP, 而不是 hostname, 需要搭配 prefer-ip-address 属性
spring.cloud.consul.discovery.ip-address=127.0.0.1

# 在注册时使用 consul IP, 而不是 hostname
spring.cloud.consul.discovery.prefer-ip-address=false

#设定 consul acl token 值
spring.cloud.consul.discovery.acl-token=4efb1523-76a3-f476-e6d8-452220593089

# 健康检查的频率, 默认 10 秒
spring.cloud.consul.discovery.health-check-interval=10s

# actuator 健康检查的 url 路径
# 默认为 为${management.endpoints.web.base-path} +/health
spring.cloud.consul.discovery.health-check-path=
 
# 自定义健康检查的 url(适合于不适用 actuator 的场景)
spring.cloud.consul.discovery.health-check-url=

总结

**首先pom文件加载必须的依赖,一个使发现并连接Consul的依赖,一个健康信息检查的依赖;然后在配置注册中心,其中最重要的是consul服务器的ip和服务ip,主类启动时@EnableDiscoveryClient的自动配置会根据导入的第一个依赖,完成配置,并根据conusl配置的服务器ip发现consul服务器并将服务注册到服务器,因此必须要先启动下载的consul服务器,注册的细节隐藏了。

如何从consul上获取服务列表?

基于Eureka的案例,从服务器获取服务都需要负载均衡的优先分配,同理consul作为注册中心时也需要。消费端获取服务只能从consul上,conusl是否集成了Ribbon呢?答案是肯定的毕竟咱spring 这么优秀!!!

既然集成了,那么只需要修改导入依赖和修改配置就可以使用!

导入依赖:

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

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <!--<version>2.6.6</version>-->
        </dependency>
		
		

配置文件:

# consul的相关配置

# consul所在的服务器的ip地址
spring.cloud.consul.host=127.0.0.1

# consul所在的服务器的端口

spring.cloud.consul.port=8500

# consul服务器实例相关配置

# 是否将自己注册
spring.cloud.consul.discovery.register=true

# 实例id
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}

# 实例名称
spring.cloud.consul.discovery.service-name=${spring.application.name}

# 实例端口
spring.cloud.consul.discovery.port=${server.port}

# 是否指定ip注册
spring.cloud.consul.discovery.prefer-ip-address=true

# 当前服务的ip地址
spring.cloud.consul.discovery.ip-address=127.0.0.1

启动类添加注解和使用Ribbon一样都是@EnableDiscoveryClient@LoadBalanced

@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient
public class TestModuleApplication {

    //java代码访问url获取返回值的对象
    @LoadBalanced  //spring cloud提供连接Ribbon的注解
    @Bean
    public RestTemplate getRestTemplate(){ return new RestTemplate(); }

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

}

服务调用成功:
在这里插入图片描述
在这里插入图片描述
Consul注册中心也搭建完成了~。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156250.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!