SpringCloud从入门到放弃 03 ——Consul服务注册与发现
文章目录
- 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服务注册与发现相关推荐
- SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- Consul服务注册与发现
Consul服务注册与发现 1.Consul简介 1.1 什么是Consul? 1.2 Consul能干什么? 1.3 下载Consul 2.安装并运行Consul 2.1 官网安装说明 2.2 使用 ...
- Consul 服务注册与发现一站式解决方案
Consul 服务注册与发现一站式解决方案 参考文章: (1)Consul 服务注册与发现一站式解决方案 (2)https://www.cnblogs.com/seattle-xyt/p/103660 ...
- Spring Cloud入门 -- Consul服务注册与发现(Hoxton.SR5版)
Consul简介 Consul 是 HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现.服务隔离.服务配置,这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能.Cons ...
- java consul服务发现_分布式项目(七)consul 服务注册与发现
说到分布式自然就离不开分布式和微服务的话题,简单聊一下. 微服务是一种软件架构方式,或者说一个一种结构设计风格,它并不是标准,它的逻辑是把一个整体服务按业务拆分成不同独立的服务,降低服务强依赖,消服务 ...
- 七、consul服务注册与发现
1.Consul简介 是什么? Consul是一套开源的分布式服务发现的配置管理系统,由HashiCorp用go语言开发 提供了微服务系统中的服务治理,配置中心,控制总线等功能.这些功能中的每一个可以 ...
- .NET Core + Consul 服务注册与发现
在分布式架构中,服务治理是必须面对的问题,如果缺乏简单有效治理方案,各服务之间只能通过人肉配置的方式进行服务关系管理,当遇到服务关系变化时,就会变得极其麻烦且容易出错. Consul[1] 是一个用来 ...
- consul服务注册与发现机制
注册中心引入 最近,网关服务让下游服务接入consol,为了解决网关转发下游服务,下游服务刚好有节点不可用,转发到不可用的节点上报错.针对分布式多节点,上面的问题常会发生,就引入了注册中心. 那什么是 ...
- SpringCloud 从菜鸟到大牛之二 服务注册与发现 Sping Cloud Eureka
继承上一篇文章 ,本文 就专门来介绍一下 服务与注册组件 服务注册与发现 Sping Cloud Eureka ,作为各个微服务的注册中心,维持心跳连接 注册中心 : Eureka Server ,E ...
最新文章
- 云计算技术 — 云计算技术发展编年史
- 雾霾经济:这10款产品,马云看了都想投资
- python记录程序运行时间的几种方法
- JAVA 手机号正则 工具类
- 刘海、水滴、挖孔都靠边!中兴吐槽:不配全面屏
- 京东到家发布618消费预测报告:原来这个时间点大多人在摸鱼?
- java中的Servlet
- 【C/C++】变量的内存分配
- sqoop导入数据(保持一致性)--staging-table
- 常见3DMAX插件导出模型丢失贴图问题
- 细谈Axios中那些不为人知的秘密!一文读懂Axios
- 安装脚本实现百度云播放视频加速
- 进程注入之DLL注入
- LUA脚本扩展wireshark自定义的协议
- 吕梁市服务器维修,终端服务器 吕梁知名智能车检网络摄像机 电话交通技术监控机柜...
- NX二次开发-UFUN读取图纸尺寸的值UF_DRF_ask_dimension_text
- 2021银川高考成绩查询,2021银川市地区高考成绩排名查询,银川市高考各高中成绩喜报榜单...
- 单数复数php单元格背景颜色,PHP-php 如何实现 英语单词 单复数 转换
- c语言输出字母表,用c语言输出字母c和菱形
- java 多线程的好处_线程多有什么好处?使用多线程的优势