微服务架构 | 3.4 HashiCorp Consul 注册中心
前言
参考资料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
《Consul 官网》
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。它提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案;
1. Consul 基础知识
1.1 Consul 是什么
- Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发;
- 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案;
- 它具有很多优点。包括:基于 raft 协议,比较简洁; 支持健康检查,同时支持 HTTP 和 DNS 协议支持跨数据中心的 WAN 集群提供图形界面;跨平台,支持 Linux、Mac、Windows
1.2 Consul 的特点
- 服务发现:提供 HTTP 和 DNS 两种发现方式;
- 健康监测:支持多种方式:HTTP、TCP、Docker、Shell 脚本定制化监控;
- KV 存储:Key、Value的存储方式;
- 多数据中心:支持多数据中心;
- 可视化 Web 界面;
2. 安装并运行 Consul 服务器
基于 Win10 下的 Consul 服务器安装;
2.1 下载 Consul
下载解压后:

2.2 运行 Consul 服务器
- 在 consul.exe 程序所在目录下打开 cmd 命令窗口;
- 键入命令
consul,显示下面说明安装成功;

- 此时键入命令
consul agent -dev使用开发模式启动;

- 访问连接可以进入 Consul 首页:http://localhost:8500;

3. 使用 Consul 管理服务提供者
使用 Consul 构建服务提供者大致与 Nacos 和 Zookeeper 相同;Nacos 与 Zookeeper 的构建方式详情请见《3.2 Alibaba Nacos 注册中心》与《3.3 Apache Zookeeper 注册中心》;
3.1 引入 pom.xml 依赖
<!--SpringCloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
3.2 修改 boostrap.yml 配置文件
# consul 服务提供者端口
server:
port: 8006
spring:
application:
name: consul-provider
# consul 注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
3.3 在主启动类上添加注解
- @EnableDiscoveryClient:使用其他组件(Nacos、zookeeper、Consul)作为注册中心;
3.4 编写业务类,并在 controller 层开放接口
这里编写一个简单接口仅作为示例;
@RestController
public class providerController{
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/provider/consul")
public String providerConsul(){
return "springcloud with consul: "+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
4. 使用 Consul 管理服务消费者
使用 Consul 构建服务消费者大致与 Nacos 和 Zookeeper 相同;Nacos 与 Zookeeper 的构建方式详情请见《3.2 Alibaba Nacos 注册中心》与《3.3 Apache Zookeeper 注册中心》;
4.1 引入 pom.xml 依赖
- 同提供者;
<!--SpringCloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
4.2 修改 boostrap.yml 配置文件
- 基本上同提供者;
# consul 服务消费者端口号
server:
port: 80
spring:
application:
name: consul-consumer
# consul 注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
4.3 在主启动类上添加注解
- 同提供者;
- @EnableDiscoveryClient:使用其他组件(Nacos、zookeeper、Consul)作为注册中心;
4.4 编写业务类
- 由于我们使用 Ribbon + RestTemplate 的负载均衡策略,因此需要在 IoC 容器中添加一个 RestTemplate JavaBean;
- 详情请见《4.1 基于 Ribbon 的负载均衡详解》;
- 该 Bean 可以在主启动类中添加;也可以在主启动类所在包或子包的 config 包中添加,如下:
@Configuration
public class ApplicationContextBean{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 我们在 controller 层开放接口给客户端,并在该接口里调用提供者的 API;
@RestController
public class ComsumerConsulController{
public static final String INVOKE_URL = "http://consul-provider";
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer/consul")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL+"/provider/consul", String.class);
System.out.println("消费者调用提供者获取服务--->result:" + result);
return result;
}
}
最后
新人制作,如有错误,欢迎指出,感激不尽!
欢迎关注公众号,会分享一些更日常的东西!
如需转载,请标注出处!

微服务架构 | 3.4 HashiCorp Consul 注册中心的更多相关文章
- 微服务架构 | 3.2 Alibaba Nacos 注册中心
目录 前言 1. Nacos 基础知识 1.1 Nacos 命名方式 1.2 Nasoc 是什么 1.3 Nacos 的 4 个关键特性 1.4 Nacos 生态图 1.5 Nacos 架构图 1.6 ...
- 微服务架构 | 3.3 Apache Zookeeper 注册中心
@ 目录 前言 1. Zookeeper 基础知识 1.1 Zookeeper 是什么 1.2 Zookeeper 的数据结构 1.3 Watcher 机制 1.4 常见应用场景分析 1.5 Zook ...
- 微服务架构 | 3.1 Netflix Eureka 注册中心
目录 前言 1. Eureka 基础知识 1.1 Eureka 模型中的服务器与客户端 1.2 Eureka 的 30s 启动机制 1.3 Eureka 为什么注册服务的 IP ,而不是主机名 1.4 ...
- 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现
庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介 在第七篇文章<庐山真面目之七微服务架构Consul ...
- 基于docker部署的微服务架构(四): 配置中心
原文:http://www.jianshu.com/p/b17d65934b58%20 前言 在微服务架构中,由于服务数量众多,如果使用传统的配置文件管理方式,配置文件分散在各个项目中,不易于集中管理 ...
- Spring Cloud构建微服务架构(四)分布式配置中心(续)
先来回顾一下,在前文中我们完成了什么: 构建了config-server,连接到Git仓库 在Git上创建了一个config-repo目录,用来存储配置信息 构建了config-client,来获取G ...
- 历史上最详细的SpringCloud搭建微服务的过程。(包括注册中心,服务提供者和服务消费者)
首先搭建注册中心,创建一个springboot的maven工程. 工程创建完成之后,先在资源文件中的application.properties中写配置文件. server.port= spring. ...
- Spring Cloud构建微服务架构(四)分布式配置中心
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...
- SpringCloud微服务实战:一、Eureka注册中心服务端
1.项目启动类application.java类名上增加@EnableEurekaServer注解,声明是注册中心 1 import org.springframework.boot.SpringAp ...
随机推荐
- WebRTC音频通话升级为视频通话
我们有时候在音频通话过程中,想要改成视频通话.如果挂断当前通话再重新发起视频通话就会显得比较麻烦. 因此很多app提供了将音频通话升级成视频通话的功能,同时也有将视频通话降为音频通话的功能. 本文演示 ...
- CF1080B Margarite and the best present 题解
Content 有 \(t\) 次询问,每次询问给定两个整数 \(l,r\),求 \(\sum\limits_{i=l}^r (-1)^i\times i\). 数据范围:\(1\leqslant t ...
- MVC三种分页方法
View部分: @using WebApplication1.Models;分页方法1引包 @*@using PagedList.Mvc; @using WebApplication1.Models; ...
- 【LeetCode】535. Encode and Decode TinyURL 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:数组 方法二:字典 日期 题目地址:https://l ...
- 【LeetCode】414. Third Maximum Number 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ...
- 【LeetCode】477. Total Hamming Distance 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 位运算 日期 题目地址:https://leetco ...
- 【剑指Offer】扑克牌顺子 解题报告(Python)
[剑指Offer]扑克牌顺子 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...
- RASP Runtime Application Self-protection 运行时应用自我保护 介绍及优缺点
RASP 介绍 Runtime Application Self-protection 运行时应用自我保护 [图源:绿盟科技] 概念 Gartner (著名信息技术研究和分析厂商) 在2014年提出了 ...
- The Hessian Penalty: A Weak Prior for Unsupervised Disentanglement
目录 概 主要内容 标量情况 向量情况 处于实际(计算量)的考量 应用到生成模型中 代码 Pebbles W., Pebbles J., Zhu J., Efros A., Torralba A. T ...
- MarkDown 使用方法
MarkDown学习 标题的使用 在MarkDown中标题的使用,是用#+空格+标题名称,来进行编辑的.一个#就是一级标题, 两个#就是两级标题,以此类推,一定要加空格,否则无效 ### 三级标题 ...
