文章目录

  • SpringCloud从入门到放弃 03 ——Consul服务注册与发现
    • 一、Consul简介
      • 1.什么是consul
      • 2.consul能做什么
    • 二、安装并运行Consul
      • 1.下载安装
      • 2.启动consul
    • 三、创建服务消费者和服务提供者
      • 创建服务提供者
      • 创建服务消费
    • 四、和Eureka、zookeeper作为注册中心的异同点
      • 和Eureka相比较
      • 和zookeeper相比较

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

一、Consul简介

1.什么是consul

Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。

提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows

2.consul能做什么

二、安装并运行Consul

1.下载安装

consul 支持MacOS 、Linux、 windows 、FreeBSD 等操作系统,在官网上可以下载对应操作系统的版本,下载地址

如果要下载其他版本

consul windows 下是无需安装的,下载完成后直接解压可以得到一个直接能运行 consul执行文件:

查看版本信息:

2.启动consul

  • 使用开发模式直接启动
    执行命令:consul agent -dev
    启动后访问:http://localhost:8500 可以看到整个consul的所有信息

三、创建服务消费者和服务提供者

创建服务提供者

1.新建module consul-provider-payment8006
2.修改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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloudlearn</artifactId><groupId>com.avgrado.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>consul-provider-payment8006</artifactId><dependencies><dependency><groupId>com.avgrado.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

3.写application.yml文件

server:port: 8006spring:application:name: consul-provider-paymentcloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}

4.写启动类(此处启动类上面的注解是@EnableDiscoveryClient)

package com.avgrado.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @ClassName PaymentConsulApplication* @Description PaymentConsulApplication8006* @Author avgrado*/
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentConsulApplication8006 {public static void main(String[] args) {SpringApplication.run(PaymentConsulApplication8006.class,args);}
}

5.写业务类

package com.avgrado.springcloud.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.UUID;/*** @ClassName PaymentConsulController8006* @Description PaymentConsulController8006 * @Author avgrado*/
@RestController
@Slf4j
public class PaymentConsulController8006 {@Value("${server.port}")private String serverPort;@GetMapping("/consul/getPayment")public String getPayment(){String result = "springcloud with consul "+serverPort + "=="+ UUID.randomUUID().toString();log.info(result);return result;}
}

6.验证测试

创建服务消费

1.新建 module consul-consumer-order80

2.修改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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloudlearn</artifactId><groupId>com.avgrado.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>consul-consumer-order80</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency><groupId>com.avgrado.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

3.写 yml 文件

server:port: 80spring:application:name: consul-consumer-ordercloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}

4.写主启动类

package com.avgrado.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @ClassName OrderConsulApplication80* @Description OrderConsulApplication80* @Author avgrado*/
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsulApplication80 {public static void main(String[] args) {SpringApplication.run(OrderConsulApplication80.class,args);}
}

5.配置 bean

package com.avgrado.springcloud.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/*** @ClassName RestConfig* @Description RestConfig* @Author avgrado*/
@Configuration
public class RestConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}

6.写业务类

package com.avgrado.springcloud.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;/*** @ClassName OrderConsulController* @Description OrderConsulController* @Author avgrado*/
@RestController
public class OrderConsulController {public static final String INVOKE_URL = "http://consul-provider-payment";@ResourceRestTemplate restTemplate;@GetMapping("/consumer/get")public String consulGetPayment(){return restTemplate.getForObject(INVOKE_URL+"/consul/getPayment",String.class);}}

7.验证测试

8.访问地址 http://localhost/consumer/get

四、和Eureka、zookeeper作为注册中心的异同点

和Eureka相比较

Consul:强一致性(CP):

  • 服务注册相比Eureka会稍慢一些。因为Consul的Raft协议要求必须过半的节点都写入成功才认为注册成功。

  • Leader挂掉后,重新选举期间整个Consul不可用。保证了强一致性,但牺牲了可用性。

Eureka:高可用性和最终一致性(AP):

  • 服务注册相对要快,因为不需要等注册信息复制到其他节点,也不保证注册信息是否复制成功。

  • 当数据出现不一致的时候,虽然A,B上的注册信息不完全相同,但是每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如果保证了可用性但牺牲了一致性。

和zookeeper相比较

  • ZooKeeper的主要功能:
    (1)作为配置信息的存储的中心服务器
    (2)命名服务
    (3)分布式同步
    (4)分组服务
    如果只是打算将ZooKeeper作为微服务发现工具,就需要用到其配置存储和分布式同步的功能。前者可以理解成具有一致性的KV存储,后者提供了ZooKeeper特有的watcher注册于异步通知机制,ZooKeeper能将节点的状态实时异步通知给ZooKeeper客户端。
    ZooKeeper提供临时节点,这些节点是客户端断开连接时删除的K / V条目。这些比心跳系统更复杂,但仍然存在固有的可扩展性问题并增加了客户端的复杂性。所有客户端必须保持与ZooKeeper服务器的活动连接并执行保持活动。另外,这需要“厚客户端”,这些客户端难以编写并且经常导致调试挑战

  • 2.Consul的主要功能 :
    (1) 通过DNS或HTTP,服务发现功能简单
    (2)多种健康的检查方式:http返回码200,内存是否超限,tcp连接是否成功
    (3) KV存储
    (4)多数据中心(这个zookeeper没有)

Consul为服务发现、健康检测、K/V存储和多数据中心提供了一流的支持。为了支持任意存储,而不仅仅是简单的K/V存储,其他系统都要求工具和lib库要率先建立。然而,通过使用客户端节点,Consul提供了一个简单的API,这个API的开发只需要瘦客户端就可以了, 而且,通过使用配置文件和DNS接口,开发人员可以建立完整的服务发现解决方案,最终,达到避免开发API的目的

SpringCloud从入门到放弃 03 ——Consul服务注册与发现相关推荐

  1. SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  2. Consul服务注册与发现

    Consul服务注册与发现 1.Consul简介 1.1 什么是Consul? 1.2 Consul能干什么? 1.3 下载Consul 2.安装并运行Consul 2.1 官网安装说明 2.2 使用 ...

  3. Consul 服务注册与发现一站式解决方案

    Consul 服务注册与发现一站式解决方案 参考文章: (1)Consul 服务注册与发现一站式解决方案 (2)https://www.cnblogs.com/seattle-xyt/p/103660 ...

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

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

  5. java consul服务发现_分布式项目(七)consul 服务注册与发现

    说到分布式自然就离不开分布式和微服务的话题,简单聊一下. 微服务是一种软件架构方式,或者说一个一种结构设计风格,它并不是标准,它的逻辑是把一个整体服务按业务拆分成不同独立的服务,降低服务强依赖,消服务 ...

  6. 七、consul服务注册与发现

    1.Consul简介 是什么? Consul是一套开源的分布式服务发现的配置管理系统,由HashiCorp用go语言开发 提供了微服务系统中的服务治理,配置中心,控制总线等功能.这些功能中的每一个可以 ...

  7. .NET Core + Consul 服务注册与发现

    在分布式架构中,服务治理是必须面对的问题,如果缺乏简单有效治理方案,各服务之间只能通过人肉配置的方式进行服务关系管理,当遇到服务关系变化时,就会变得极其麻烦且容易出错. Consul[1] 是一个用来 ...

  8. consul服务注册与发现机制

    注册中心引入 最近,网关服务让下游服务接入consol,为了解决网关转发下游服务,下游服务刚好有节点不可用,转发到不可用的节点上报错.针对分布式多节点,上面的问题常会发生,就引入了注册中心. 那什么是 ...

  9. SpringCloud 从菜鸟到大牛之二 服务注册与发现 Sping Cloud Eureka

    继承上一篇文章 ,本文 就专门来介绍一下 服务与注册组件 服务注册与发现 Sping Cloud Eureka ,作为各个微服务的注册中心,维持心跳连接 注册中心 : Eureka Server ,E ...

最新文章

  1. 云计算技术 — 云计算技术发展编年史
  2. 雾霾经济:这10款产品,马云看了都想投资
  3. python记录程序运行时间的几种方法
  4. JAVA 手机号正则 工具类
  5. 刘海、水滴、挖孔都靠边!中兴吐槽:不配全面屏
  6. 京东到家发布618消费预测报告:原来这个时间点大多人在摸鱼?
  7. java中的Servlet
  8. 【C/C++】变量的内存分配
  9. sqoop导入数据(保持一致性)--staging-table
  10. 常见3DMAX插件导出模型丢失贴图问题
  11. 细谈Axios中那些不为人知的秘密!一文读懂Axios
  12. 安装脚本实现百度云播放视频加速
  13. 进程注入之DLL注入
  14. LUA脚本扩展wireshark自定义的协议
  15. 吕梁市服务器维修,终端服务器 吕梁知名智能车检网络摄像机 电话交通技术监控机柜...
  16. NX二次开发-UFUN读取图纸尺寸的值UF_DRF_ask_dimension_text
  17. 2021银川高考成绩查询,2021银川市地区高考成绩排名查询,银川市高考各高中成绩喜报榜单...
  18. 单数复数php单元格背景颜色,PHP-php 如何实现 英语单词 单复数 转换
  19. c语言输出字母表,用c语言输出字母c和菱形
  20. java 多线程的好处_线程多有什么好处?使用多线程的优势

热门文章

  1. 2018最全的iOS面试题及答案
  2. 【沐风老师】3dmax一键窗户生成器插件使用方法详解
  3. Inventor怎么让零件透明(但是可见)附效果图
  4. 大数据人工智能---开篇导论
  5. opencv基础1,图片与矩阵
  6. 购物卡逻辑思维导图整理
  7. 3月“ChatGPT”相关热门论文-AMiner
  8. (转)王国斌:价值投资的制度基础
  9. 查看计算机计划,win10系统查看任务计划的具体办法
  10. 上海交大和浙大计算机专业哪个学校,清华、北大最差的专业和上海交大、浙大最好的专业怎么选?...