Consul注册中心
1.Consul是什么?
Consul是有HashiCorp基于Go语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件。**用于实现分布式系统的服务发现与配置。**它具有天然可一致性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署;
2.Consul快速入门
2.1 Consul的角色
client:
- CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。
- 无状态,将HTTP和DNS接口请求转发给局域网内中的服务端集群。
server:
- SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
- 保存配置信息,高可用集群,每个数据中心的server数量推荐为3个或者5个
2.2 Consul的工作原理
consul注册中心包含两个角色:
- client:代理,将获取的请求转发给server服务集群
- server:服务。处理具体的业务
服务注册:
- provide注册到consul的client,client转发请求到server,server保存注册信息,并同步到集群下的其他servere,consul会定时向provider做健康检查,检查服务是否正常
服务发现:
- consumer向consul的client发送请求,获取路由,client转发请求到server,处理请求,返回一个临时的文件
2.3 创建步骤
-
搭建Provider和Consumer服务(一个普通的springboot服务)
-
使用RestTemplate完成远程调用
-
将Provider服务注册到Consul中
-
Consumer服务通过从Consul中抓取Provider地址,完成远程调用
-
从consul获取Provider地址,也是使用DiscoveryClient对象
package com.itheima.consumer.controller; import com.itheima.consumer.domain.Goods; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.List; /* order服务远程调用goods服务 要使用restTemplate模板类 将其声明为bean 注入 调用方法 */ @RestController @RequestMapping("order") public class