Consul
是
HashiCorp
公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服 务注册与发现的方案,Consul
的方案更
“
一站式
”
,内置了服务注册与发现框 架、分布一致性协议实 现、健康检查、Key/Value
存储、多数据中心方案,不再需要依赖其它工具(比如
ZooKeeper
等)。 使用起来也较 为简单。Consul
使用
Go
语言编写,因此具有天然可移植性
(
支持
Linux
、
windows
和 Mac OS X);安装包仅包含一个可执行文件,方便部署,与
Docker
等轻量级容器可无缝配合。
一、下载
官网:https://www.consul.io/downloads.html。
二、开启consul
我们可以下载windows版本的,然后呢,直接命令行启动就可以了
如果下面这样 就是启动成功
我们可以输入http://localhost:8500/ui/dc1/services,查看页面
consul给我们提供了一些api。比如:
(1)注册服务:通过postman发送put请求到localhost:8500/v1/catalog/register地址可以完成服务
{
"Datacenter": "dc1",
"Node": "node01",
"Address": "192.168.74.102",
"Service": {
"ID":"mysql-01",
"Service": "mysql",
"tags": ["master","v1"],
"Address": "192.168.74.102",
"Port": 3306
}
}
但是由于是api注册的,进行心跳健康检查的时候,发现没有。
(2)服务查询:通过postman发送get请求到 localhost:8500/v1/catalog/services查看所有的服务列表
通过postman发送get请求到 localhost:8500/v1/catalog/service/服务名 查看具体的服务详情
(3)服务删除:通过postman发送put请求到localhost:8500/v1/catalog/deregister删除服务
三、微服务注册到consul
跟之前的基础项目是一样的
添加product_service依赖
<!--springcloud 提供的对基于consul的服务发现-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--actuator的健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
修改product_service配置
server:
port: 9001 #端口
spring:
application:
name: service-product #服务名称
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
username: root
password: 111111
jpa:
database: MySQL
show-sql: true
open-in-view: true
###开始配置consul的服务注册
cloud:
consul:
host: 127.0.0.1 #consul服务器的主机地址
port: 8500 #consul服务器的端口有
discovery:
#是否需要注册
register: true
#注册的实例ID (唯一标志)
instance-id: ${spring.application.name}-1
#服务的名称
service-name: ${spring.application.name}
#服务的请求端口
port: ${server.port}
#指定开启ip地址注册
prefer-ip-address: true
#当前服务的请求ip
ip-address: ${spring.cloud.client.ip-address}
直接启动项目
四、消费者调用提供者
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--springcloud 提供的对基于consul的服务发现-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--actuator的健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
server:
port: 9002 #端口
spring:
application:
name: service-order #服务名称
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
username: root
password: 111111
jpa:
database: MySQL
show-sql: true
open-in-view: true
###开始配置consul的服务注册
cloud:
consul:
host: 127.0.0.1 #consul服务器的主机地址
port: 8500 #consul服务器的ip地址
discovery:
#是否需要注册
register: true
#注册的实例ID (唯一标志)
instance-id: ${spring.application.name}-1
#服务的名称
service-name: ${spring.application.name}
#服务的请求端口
port: ${server.port}
#指定开启ip地址注册
prefer-ip-address: true
#当前服务的请求ip
ip-address: ${spring.cloud.client.ip-address}
启动项目:
成功!!!
源码:git@gitee.com:Zesystem/springclouddemoconsul.git