Consul服务注册中心
SpringCloud
中文官网:https://www.springcloud.cc/spring-cloud-consul.html
Consul是一套开源的分布式服务发现和配置管理系统,Go语言开发。
Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。
与其它分布式服务注册与发现的方案相比,Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。
Eureka、Zookeeper、Consul三个注册中心的异同点
组件名 | 语言 | 健康检查 | 对外暴露接口 | CAP | Spring Cloud 集成 |
---|---|---|---|---|---|
Eureka | Java | 可配支持 | HTTP | AP | 集成 |
Consul | Go | 支持 | HTTP/DFS | CP | 集成 |
Zookeeper | java | 支持 | 客户端 | CP | 集成 |
安装Consul
可以docker安装,win也可。consul --version查看版本。
win开启:
# 先进到consul目录 ,cmd
# 开发模式启动
consul agent -dev
通过localhost:8500访问控制界面
服务提供者
<!--SpringCloud consul-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
server:
# consul服务端口
port: 8006
spring:
application:
name: cloud-provider-payment
cloud:
consul:
# consul注册中心地址
host: localhost
port: 8500
discovery:
hostname: 127.0.0.1
# 服务名字
service-name: ${spring.application.name}
启动类添加**@EnableDiscoveryClient**,该注解用于向使用consul或者zookeeper作为注册中心时注册服务。控制界面多了服务名称。
服务消费者
依赖配置一样,消费者使用RestTemplate调用服务提供者接口,@LoadBalanced实现集群负载均衡,轮询。
/**
* @author zzyy
* @date 2020-02-18 17:27
**/
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
/**
* @author zzyy
* @create 2020-02-18 17:23
**/
@RestController
@Slf4j
public class OrderZkController {
public static final String INVOKE_URL = "http://cloud-provider-payment"; //提供者服务名字,前提是消费者和提供者都要注册到注册中心
@Resource
private RestTemplate restTemplate;
/**
* http://localhost/consumer/payment/consul
*
* @return
*/
@GetMapping("/consumer/payment/consul")
public String paymentInfo() {
return restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
}
}
查看控制页面。
集群搭建
注册中心集群:加多个地址即可,查看eureka、zookeeper和consul官网。
服务集群保证服务名一致即可。