使用Spring Cloud Consul实现服务的注册和发现
2017-01-22 14:38
1151 查看
1 搭建consul环境
参考SPING CLOID 官方 http://cloud.spring.io/spring-cloud-consul/ 和consul官方文档 https://www.consul.io/intro/getting-started/install.html
2 建立Consul Cluster
要想利用Consul提供的服务实现服务的注册与发现,我们需要建立Consul Cluster。在Consul方案中,每个提供服务的节点上都要部署和运行Consul的agent,所有运行Consul agent节点的集合构成Consul Cluster。Consul agent有两种运行模式:Server和Client。这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上 的应用服务无关。以Server模式运行的Consul agent节点用于维护Consul集群的状态,官方建议每个Consul Cluster至少有3个或以上的运行在Server mode的Agent,Client节点不限。
项目规划,2个服务端,1个客户端
(n1 centos7)192.168.0.98 server mode
(n1 windwos10 )192.168.0.211 server mode with Consul Web UI
(n1 centos7)192.168.0.97 client mode
在三台主机上分别下载和安装Consul包,安装包很简单,只是包含一个可执行文件consul。在n2主机上还要下载一份Consul Web UI包,支持图形化展示Consul cluster中的节点状态和服务状态。
Consul Cluster的启动过程如下:
n1主机:
输入命令:./consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=192.168.0.98 -dc=dc1
n2主机:
输入命令:consul.exe agent -server -bootstrap-expect 2 -data-dir ./consul_data -node=n2 -bind=192.168.0.211 -ui-dir ./consul_ui -dc=dc1
从两个server agent的启动日志可以看出,n1、n2启动后并不知道集群其他节点的存在。以n1为例,通过consul members和consul info查看当前agent状态:
consul members
Node Address Status Type Build Protocol DC
n1 192.168.0.98:8301 alive server 0.5.2 2 dc1
$ consul info
… …
consul:
bootstrap = false
known_datacenters = 1
leader = false
server = true
raft:
applied_index = 0
commit_index = 0
fsm_pending = 0
last_contact = never
last_log_index = 0
last_log_term = 0
last_snapshot_index = 0
last_snapshot_term = 0
num_peers = 0
state = Follower
term = 0
… …
可以看出,n1上的agent当前状态是Follower,bootstrap = false;n2同样也是这个情况。整个Cluster并未完成Bootstrap过程。
我们用consul join命令触发Cluster bootstrap过程,我们在n1上执行如下命令:
$ consul join 192.168.0.211
Successfully joined cluster by contacting 1 nodes.
我们通过consul join子命令将当前节点加入包含成员192.168.0.211(也就是n2)的集群中去。命令执行结果通过n1和n2的日志可以观察到
接下来我们启动n3上的client mode agent:
输入命令:
./consul agent -data-dir ./consul_data -node=n3 -bind=192.168.0.97 -dc=dc1
在n3上join n1后 ./consul join 192.168.0.98
n3上consul members可以查看到如下内容:
3 服务注册与发现
我们建立Consul Cluster是为了实现服务的注册和发现。Consul支持两种服务注册的方式,一种是通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己,另外一种则是通过在配置文件中定义服务的方式进行注册。Consul文档中建议使用后面一种方式来做服务 配置和服务注册。一:服务端1:
项目依赖
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-consul-dependencies</artifactId> <version>1.0.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> <version>1.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> </dependencies>
注意,增加spring-boot-actuator是为了项目可以访问/health 路径来判断服务是否健康
import org.springframework.boot.SpringApplication; import org.springframework.boo 4000 t.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @EnableDiscoveryClient @RestController public class ConsulApp { @RequestMapping("/home") public Object home() { System.out.println("1111111111111"); return "OK11"; } public static void main( String[] args ) { SpringApplication.run(ConsulApp.class, args); } }
application.properties 配置内容
server.port=9955 spring.application.name=chaoge spring.cloud.consul.host=192.168.0.98 spring.cloud.consul.port=8500 spring.cloud.consul.enabled=true spring.cloud.consul.discovery.enabled=true spring.cloud.consul.discovery.instanceId=tomcat1 spring.cloud.consul.discovery.serviceName=tomcat spring.cloud.consul.discovery.hostname=192.168.2.95 spring.cloud.consul.discovery.port=${server.port} spring.cloud.consul.discovery.healthCheckUrl=http://192.168.0.211:9955/health spring.cloud.consul.discovery.healthCheckInterval=10s spring.cloud.consul.discovery.tags=dev
由于我们增加了@EnableDiscoveryClient注解,所以,系统启动的时候,就会向consul注册一个服务,服务的名字为tomcat, ID为tomcat1
访问consul的HTTP API /v1/catalog/service/chaoge 输出如下:
{ "Node":"192.168.1.100", "Address":"192.168.1.100", "ServiceID":"tomcat1", "ServiceName":"chaoge", "ServiceTags":["dev"], "ServiceAddress":"192.168.2.95", "ServicePort":9955, "ServiceEnableTagOverride":false, "CreateIndex":993, "ModifyIndex":1057 }
相关文章推荐
- 使用Spring Cloud Consul实现服务的注册和发现
- 详解使用Spring Cloud Consul实现服务的注册和发现
- 服务注册发现consul之二:使用Spring Cloud Consul实现服务的注册和发现
- 使用Spring Cloud Consul实现服务的注册和发现
- 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):服务注册和发现(Consul)
- 详解Spring Cloud Consul 实现服务注册和发现
- Spring Cloud Consul 实现服务注册和发现
- Spring Cloud Consul使用——服务注册与发现(注册中心)
- (二)SpringBoot+SpringCloud —— 使用Eureka实现服务注册与发现
- spring cloud搭建微服务second-fiberhome(二):结合consul实现服务注册与服务发现
- springcloud consul +consul 实现服务注册及发现
- 使用Spring Cloud Zookeeper实现服务的注册和发现
- SpringCloud之consul (服务注册发现)客户端的安装与简单使用|第十三章-yellowcong
- Spring cloud 实现服务注册及发现
- SpringCloud之consul(服务注册发现,客户端安装) |第十四章 -yellowcong
- 使用consul实现分布式服务注册和发现
- 使用consul实现服务的注册和发现
- Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】
- Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】