小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

Consul简介

Consul是一个分布式高可用系统,包含多个组件,但整体上提供了微服务架构中服务发现和服务配置的工具。 Spring Cloud Consul项目是Consul的服务治理实现。它是Eureka的替代品,比Consul功能更齐全:

  1. 服务发现
  2. 健康检查
  3. 键/值存储
  4. 多个数据中心

领事角色

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

server:服务器,保存配置信息,高可用集群,在局域网内与本地客户端通信,通过广域网与其他数据中心通信。

在这里插入图片描述

1. Producer启动时,会向Consul发送post请求,并告诉Consul自己的IP和Port。

2、Consul收到Producer的注册后,会每隔10秒(默认)向Producer发送一次健康检查请求,检查Producer是否健康。

3、当Consumer向Producer发送GET请求/api/address时,会先从Consul获取一张存储服务IP和Port的临时表,从表中获取Producer的IP和Port,然后发送GET请求/ API /地址

4.临时表每10秒更新一次,仅包含通过健康检查的Producer。

Spring Cloud Consul项目是Consul的服务治理实现。 Consul是一个分布式高可用系统,包含多个组件,但作为一个整体,为我们微服务架构中的基础设施提供服务发现和服务配置工具。

Consul和Eureka的区别
在这里插入图片描述

Spring Cloud支持很多服务发现软件,Eureka只是其中之一。下面是Spring Cloud支持的服务发现软件及其特点对比:

在这里插入图片描述

Consul下载与安装

Consul官网下载

在这里插入图片描述
在这里插入图片描述
下载完成后解压到对应目录,目录下只有一个consul.exe的启动程序。

也可以通过doc命令启动它并配置一些参数:

//开发模式下监听任意地址的注册
consul agent -dev -client=0.0.0.0

Consul的后台管理界面的地址是:http://ip:8500

在这里插入图片描述
在这里插入图片描述
只能以开发者模式开启才能使用postman工具即可模拟注册与发现。

consul服务注册的地址是http://ip:8500/v1/catalog/register,请求方式是``put```。

consul服务发现的地址是http://ip:8500/v1/catalog/services,请求方式是get

可以通过postman工具模拟服务注册和发现过程。在实际使用中,注册和发现地址是隐藏的。

服务注册与发现

spring-boot-starter-actuator健康检查依赖于此包。

spring-cloud-starter-consul-discovery Spring Cloud Consul 的支持。

Consul还支持kv存储:

在这里插入图片描述

如何在consul上注册服务?

  1. 导入相关依赖
<!--spring cloud 提供对于consul服务发现的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    <version>2.2.8.RELEASE</version>
</dependency>

<!--actuator健康检查-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.6.6</version>
</dependency>



  1. 配置注册中心
# 服务注册到注册中心

# 服务名称
spring.application.name=bill-service

# 配置服务端口
server.port=8081

# consul的相关配置

# consul所在的服务器的ip地址
spring.cloud.consul.host=127.0.0.1

# consul所在的服务器的端口

spring.cloud.consul.port=8500

# consul服务器实例相关配置

# 是否将自己注册
spring.cloud.consul.discovery.register=true

# 实例id
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}

# 实例名称
spring.cloud.consul.discovery.service-name=${spring.application.name}

# 实例端口
spring.cloud.consul.discovery.port=${server.port}

# 是否指定ip注册
spring.cloud.consul.discovery.prefer-ip-address=true

# 当前服务的ip地址
spring.cloud.consul.discovery.ip-address=127.0.0.1

  1. 启动Consul服务器
    在这里插入图片描述
  2. 启动服务

在这里插入图片描述

启动服务注意别忘了在启动类上加@EnableDiscoveryClient注解。启动时还遇到了一个小错误无法自省类 org.springframework.cloud.context.properties.ConfigurationPropertiesBean
5. 查看服务

在这里插入图片描述
服务已成功注册到注册中心。

相关配置详解

# 直接指定服务的 consul service id(即 instance id).
# 默认情况下为 spring.application.name + server.port, 如果在多个服务器上同一个服务, 因为应用名和端口都一致, 会导致service id 会重复, 所以一般情况都需要引入一个随机数避免重复 . 
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${random.value}

# 指定服务的 consul service name 
spring.cloud.consul.discovery.service_name=some_name

# consul 服务器主机名 
spring.cloud.consul.discovery.hostname=your_host

# consul 服务器端口
spring.cloud.consul.discovery.port=8500

# 维护 tags
$ 下面示例的 tag map 是:  foo->bar 和 baz->baz
spring.cloud.consul.discovery.tags:foo=bar, baz

# 是否启用服务发现 
spring.cloud.consul.discovery.enabled=true 

# 使用 consul 服务器 IP, 而不是 hostname, 需要搭配 prefer-ip-address 属性
spring.cloud.consul.discovery.ip-address=127.0.0.1

# 在注册时使用 consul IP, 而不是 hostname
spring.cloud.consul.discovery.prefer-ip-address=false

#设定 consul acl token 值
spring.cloud.consul.discovery.acl-token=4efb1523-76a3-f476-e6d8-452220593089

# 健康检查的频率, 默认 10 秒
spring.cloud.consul.discovery.health-check-interval=10s

# actuator 健康检查的 url 路径
# 默认为 为${management.endpoints.web.base-path} +/health
spring.cloud.consul.discovery.health-check-path=
 
# 自定义健康检查的 url(适合于不适用 actuator 的场景)
spring.cloud.consul.discovery.health-check-url=

总结

**首先pom文件加载必须的依赖,一个使发现并连接Consul的依赖,一个健康信息检查的依赖;然后在配置注册中心,其中最重要的是consul服务器的ip和服务ip,主类启动时@EnableDiscoveryClient的自动配置会根据导入的第一个依赖,完成配置,并根据conusl配置的服务器ip发现consul服务器并将服务注册到服务器,因此必须要先启动下载的consul服务器,注册的细节隐藏了。

如何从consul获取服务列表?

基于Eureka的案例,从服务器获取服务需要进行负载均衡的优先级分配。使用consul作为注册中心时也是如此。消费者只能从consul获得服务。 Consul是否集成了Ribbon?答案是肯定的,毕竟我们的春天真好! ! !

现在已经集成了,只需要修改导入依赖,修改配置就可以使用了!

导入依赖项:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>3.0.3</version>
        </dependency>

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <!--<version>2.6.6</version>-->
        </dependency>
		
		

配置文件:

# consul的相关配置

# consul所在的服务器的ip地址
spring.cloud.consul.host=127.0.0.1

# consul所在的服务器的端口

spring.cloud.consul.port=8500

# consul服务器实例相关配置

# 是否将自己注册
spring.cloud.consul.discovery.register=true

# 实例id
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}

# 实例名称
spring.cloud.consul.discovery.service-name=${spring.application.name}

# 实例端口
spring.cloud.consul.discovery.port=${server.port}

# 是否指定ip注册
spring.cloud.consul.discovery.prefer-ip-address=true

# 当前服务的ip地址
spring.cloud.consul.discovery.ip-address=127.0.0.1

启动类添加注解和使用Ribbon一样都是@EnableDiscoveryClient@LoadBalanced

@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient
public class TestModuleApplication {
    

    //java代码访问url获取返回值的对象
    @LoadBalanced  //spring cloud提供连接Ribbon的注解
    @Bean
    public RestTemplate getRestTemplate(){
     return new RestTemplate(); }

    public static void main(String[] args) {
    
        SpringApplication.run(TestModuleApplication.class, args);
    }

}

服务调用成功:
在这里插入图片描述
在这里插入图片描述
Consul注册中心也搭建完成了~。

. . .

相关推荐

额外说明

Java使用POI导出Excel

目录 一、前景 二、概念 2.1. 简介 2.2.Excel版本和相关对象 2.3.WorkBook 2.4.POI依赖 三、POI - 写 3.1.代码示例 3.2. 性能对比 3.3. 测试rowAccessWindowSize 3.4. 导出Exc

额外说明

杀死占用端口的进程

1.找到占用端口号的进程 netstat -ano | findstr 端口号 例如:找到找到占用1099端口的进程 2.强制关闭占用端口的进程 taskkill /F /pid 进程号 例如:强制停止12948进程

额外说明

APICloud(二):选择一张或多张图片

静态页面和效果就拿微信的发朋友圈的界面来说吧,长按“相机”图标、或者点击“添加图片的+按钮”时假设触发的事件为addPic。 一、事件触发:addPic /** *点击添加图片的图标时触发该事件,该事件用来弹出框让选择是从相册中添加数据还是拍照 *

额外说明

阿里P6花七天时间整理地方软件测试基础知识,高手请绕道

​ 可以说软件测试所学习的知识都是在循序渐进的,从更基础的知识逐渐延伸到困难的知识,由此可以看出,基础知识是这些重难点知识延伸的基础,想要升职加薪,基础知识必须牢靠! 目录 一、软件测试概述 1、软件缺陷 2、软件测试的定义及原则 二、软件测试过程与策略

额外说明

深入解析ThreadLocal源码

概念 ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。 当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本,即每个线程内部都会有一个该变量,这样同时多个线程访问该变量

额外说明

数据安全-分类分级 调研分析报告

目录 前言 一、数据分类分级概述 1.数据分类 2.数据分级 二、数据分类分级原则 三、数据分类分级的框架和方法 1.数据分类分级的框架 2.分类标准 分类常见的方法 2.1 MECE 2.2 线分法和面分法及混合分法 2.3 数据主题域 2.4 技术选

额外说明

validation-api 简介、中文文档、中英对照文档 下载

validation-api 文档 下载链接(含jar包、源码、pom) 组件名称 中文-文档-下载链接 中英对照-文档-下载链接 validation-api-1.1.0.Final.jar validation-api-1.1.0.Final-API

额外说明

【CV 入门必读论文】人脸检测的突破:探索 CNN 级联的力量

导言 人脸检测一直是计算机视觉领域中一项重要而具有挑战性的任务。随着深度学习技术的迅猛发展,基于卷积神经网络(CNN)的人脸检测方法取得了显著的突破。其中一篇备受瞩目的论文是《A Convolutional Neural Network Cascade

额外说明

如何申请百度地图开发者AK和基本使用,并解决Uncaught ReferenceError: BMapGL is not defined的错误

文章目录 1. 文章引言 2. 申请AK 3. 使用AK 4. 解决BMapGL is not defined的错误 5. 文末总结 1. 文章引言 今天在学习amis框架中的地理位置(LocationPicker)的组件,如下图所示: 关于amis的更

额外说明

【高级语言程序设计(一)】第 10 章:文件

目录 一、文件概述 (1)文件定义 (2)文件命名 (3)文件分类 ① 按照文件的内容划分 ② 按照文件的组织形式划分 ③ 按照文件的存储形式划分 ④ 按照文件的存储介质划分 (4)文件存取方式 (5)文件系统  二、文件的打开和关闭函数 (1)文件打开

ads via 小工具