Consul简介

Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现、服务隔离、服务配置,这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。

与其它分布式服务注册与发现的方案相比,Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。

Consul 的主要特点有:
Service Discovery : 服务注册与发现,Consul 的客户端可以做为一个服务注册到 Consul,也可以通过 Consul 来查找特定的服务提供者,并且根据提供的信息进行调用。

Health Checking: Consul 客户端会定期发送一些健康检查数据和服务端进行通讯,判断客户端的状态、内存使用情况是否正常,用来监控整个集群的状态,防止服务转发到故障的服务上面。

KV Store: Consul 还提供了一个容易使用的键值存储。这可以用来保持动态配置,协助服务协调、建立 Leader 选举,以及开发者想构造的其它一些事务。

Secure Service Communication: Consul 可以为服务生成分布式的 TLS 证书,以建立相互的 TLS 连接。 可以使用 intentions 定义允许哪些服务进行通信。 可以使用 intentions 轻松管理服务隔离,而不是使用复杂的网络拓扑和静态防火墙规则。

Multi Datacenter: Consul 支持开箱即用的多数据中心,这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

Consul 角色
Server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 Server 数量推荐为 3 个或是 5 个。

Client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

Consul 旨在对 DevOps 社区和应用程序开发人员友好,使其成为现代、弹性基础架构的理想选择。

以上内容来至于

注册中心产品比较

CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
  C:一致性(Consistency),即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,所以,一致性,说的就是数据一致性。
  A:可用性(Availability), 即服务一直可用,而且是正常相应时间。
  P:分区容错性(Partition Tolerance),即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

Consul安装

由于consul是由go语言开发的,所以我们需要对其进行安装

官网Consul下载地址:https://www.consul.io/downloads.html

下载对应系统的zip文件,并且解压得到如下。

使用shift + 鼠标右键 选中“在此处打开powershell”。然后输入如下命令 .\consul.exe agent -dev

启动成功之后访问:localhost:8500。看到如下界面说明已经启动完成

consul web管理页面介绍

Services:默认的管理界面页面,用来展示所有注册到 Consul 的服务,启动后默认会有一个 consul 服务,也就是consul服务本身。

Nodes:在 Services 界面双击服务名就会来到 Services 对于的 Nodes 界面,Services 是按照服务的抽象来展示的,Nodes 展示的是此服务的具体节点信息。比如启动了两个订单服务实例,Services 界面会出现一个订单服务,Nodes 界面会展示两个订单服务的节点。

Key/Value :如果有用到 Key/Value 存储,可以在界面进行配置、查询。

ACL:全称 Access Control List,为访问控制列表的展示信息。

Intentions:可以在页面配置请求权限。

创建服务并注册到Consul

右键主项目(springcloud) ---> new ---> module

添加依赖

创建完成修改consul-service服务模块的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.8.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.hjy.springcloud</groupId><artifactId>consul-service</artifactId><version>0.0.1-SNAPSHOT</version><name>consul-service</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR5</spring-cloud.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- 健康检查 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Cloud Consul 的支持 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

配置启动类

添加了 @EnableDiscoveryClient 注解表示支持服务发现。

@EnableDiscoveryClient // 新增注解表示 支持服务发现
@SpringBootApplication
public class ConsulServiceApplication {public static void main(String[] args) {SpringApplication.run(ConsulServiceApplication.class, args);}}

配置文件

创建完成修改consul-service服务模块的配置文件后缀名,改为 .yml格式便于阅读

yml 和 properties的区别(后续将不再描述)

server:port: 8201spring:application:name: consul-servicecloud:consul:# 将服务注册到consulhost: localhostport: 8500discovery:service-name: consul-service

运行服务

详细的运行步骤请看上一篇博客 ---- Spring Cloud入门 -- Eureka服务注册与发现(Hoxton.SR5版)

运行完后重新访问:localhost:8500。看到consul-service服务,证明服务注册到consul成功

进行测试

创建一个控制器TestController,内容如下

package com.hjy.springcloud.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class TestController {@ResponseBody@GetMapping("/test")public String test() {return "测试成功";}}

重新运行项目,运行成功后访问http://localhost:8201/test。

总结

目前我们只是简单的进行服务注册,后续还有服务调用、服务隔离、服务配置、健康检查等等

结束语

如有什么写不好的地方,还请大家多多包涵,并给予指出,谢谢

Spring Cloud入门 -- Consul服务注册与发现(Hoxton.SR5版)相关推荐

  1. Spring Cloud入门 -- Eureka服务注册与发现(Hoxton.SR5版)

    什么是Spring Cloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.智能路由.消息总 ...

  2. spring cloud gateway之服务注册与发现

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在之前的文章介绍了Spring Cloud Gateway的Predict(断言).Filter( ...

  3. spring cloud 学习之 服务注册和发现(Eureka)

    一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...

  4. Spring Cloud入门-Admin服务监控中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Spring Boot Admin 简介 创建admin-server模块 创建admin-client模块 监控信息演示 结合注册中心使用 修改 ...

  5. Spring Cloud入门-Ribbon服务消费者(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Ribbon简介 RestTemplate的使用 GET请求方法 getForObject方法 getForEntity方法 POST请求方法 p ...

  6. Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建naco ...

  7. Spring Cloud入门-Gateway服务网关(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Gateway 简介 相关概念 创建 api-gateway模块 在pom.xml中添加相关依赖 两种不同的配置路由方式 使用yml配置 使用Ja ...

  8. Spring Cloud入门 -- Ribbon服务消费者(Hoxton.SR5版)

    Ribbon简介 Ribbon是Netflix公司开源的客户端负载均衡器,可以控制Http和Tcp客户端的负载均衡. Ribbon默认提供了很多负载均衡算法,如:轮询.随机等,也可以实现自定义的负载均 ...

  9. SpringCloud从入门到放弃 03 ——Consul服务注册与发现

    文章目录 SpringCloud从入门到放弃 03 --Consul服务注册与发现 一.Consul简介 1.什么是consul 2.consul能做什么 二.安装并运行Consul 1.下载安装 2 ...

最新文章

  1. BIZTALK项目中WEB引用WEBSERVICES服务时候报错
  2. MVC扩展控制器工厂,通过继承DefaultControllerFactory来决定使用哪个接口实现,使用Ninject...
  3. css三种引入方式以及其优先级的说法
  4. 闲鱼发布2020租房报告:每天近万人在闲鱼找室友
  5. .netcore 和 java_Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
  6. java给word表格追加行_Java 使用Spire.Cloud.Word给Word文档添加表格
  7. 计算机网络教程_第三章数据链路层_整理与复习
  8. 五一假期游泰国:曼谷景点游玩省钱攻略
  9. 华为交换机主备命令_华为交换机命令中文意思
  10. 信息安全等级合规测评
  11. 计算机二级自学需要买书嘛,计算机二级ms office自学,买什么书看
  12. 计算机电路计数器pl什么意思,计数器原理—不懂就要看哦~~
  13. Havok VS PhysX 漫谈物理加速世界!
  14. git提示CRLF will be replaced by LF问题及解决
  15. java发展趋势看法_我对前端技术更新的看法以及未来发展趋势预测
  16. 从零开始搭建EasyDarwin环境——linux系统共享目录实现
  17. define定义一个宏表明1年中有多少秒
  18. 理解java代理模式
  19. 2021年度十大开源SLAM算法
  20. 某dewu(毒)数据接口研究

热门文章

  1. EOJ 唐纳德与子串 (Easy)
  2. 你家200兆宽带 真的就是200兆吗?原来我们一直都搞错了
  3. 《Counting Out Time: Class Agnostic Video Repetition Counting in the Wild》论文笔记
  4. 不会就要问,求大神解决一下安装linux不认内置硬盘的问题
  5. ssh、git环境配置
  6. 百度AI攻略:银行卡识别
  7. 真实创业故事:我在15平的出租房里死磕项目!
  8. HTML入门手敲学习笔记
  9. DENSE 数据集 - STF 数据集(CVPR 2020)
  10. [tips] 1.2 优麒麟ubuntu 20安装ROS2 Foxy版本