Consul注册中心

1.概念

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,
Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、 健康检查、Key/Value 存储、多数据中心方案,
不再需要依赖其它工具(比如ZooKeeper等),使用起来也较为简单。
Consul使用Go语言编写,因此具有天然可移植性(支持Linuk、 Windows 和MacOS) ;
安装包仅包含一个可执行文件,方便部署,与Docke等轻量级容器可无缝配台。

2.特性

  • Raft算法
  • 服务发现
  • 健康检查
  • KeyValue存储
  • 多数据中心
  • 支持http和dns协议接口
  • 官方提供web管理界面

3.Consul角色

  • client: 客户端,无状态,将HTTP和DNS接口请求转发给局域网内的服务端集群。
  • server: 服务端,保存配置信息,高可用集群,每个数据中心的server数量推荐为3个或者5个。

4.原理


Eureka其实就是个Servlet程序,跑在Servlet容器中; Consul则是用go语言编写的第三方工具需要单独安装使用。

5.安装

  • 1.官网下载压缩包解压
  • 2.cd到对应的目录下,使用cmd启动Consul
# -dev表示开发模式运行,另外还有-server 表示服务模式运行
consul agent -dev -client=0.0.0.0

6.使用

8500 管理界面

  • 父模块pom.xml与Eureka相同,具体代码与Eureka相同

6.1 provider模块

<dependencies>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
  • application.yml
server:
  port: 7070

spring:
  application:
    name: provider

cloud:
  consul:
    #注册中心访问地址
  host: localhost
  port: 8500
  #服务提供者信息
  discovery:
    register: true
    #注册实例id 唯一
    instance-id: ${spring.application.name}-01
    #服务名称
    service-name: ${spring.application.name}
    port: ${server.port}
    #是否使用IP地址注册
    prefer-ip-address: true
    #服务请求ip
    ip-address: ${spring.cloud.client.ip-address}

6.2 consumer模块

  • application.yml
server:
  port: 9090

spring:
  application:
    name: consumer

cloud:
  consul:
    #注册中心访问地址
  host: localhost
  port: 8500
  #服务提供者信息
  discovery:
    register: false
    #注册实例id 唯一
    instance-id: ${spring.application.name}-01
    #服务名称
    service-name: ${spring.application.name}
    port: ${server.port}
    #是否使用IP地址注册
    prefer-ip-address: true
    #服务请求ip
    ip-address: ${spring.cloud.client.ip-address}
posted @ 2023-06-19 16:33  lwx_R  阅读(144)  评论(0编辑  收藏  举报