Spring Cloud(五):Consul服务注册与发现

SpringCloud Consul:服务发现与配置中心集成 Spring Cloud Consul为微服务架构提供了强大的服务发现和配置管理解决方案。通过Consul,可以实现服务的自动注册与发现,简化服务通信;同时,Consul的键值存储功能可以作为配置中心,实现配置的集中管理和动态刷新。在实际应用中,Spring Cloud Consul的集成非常简单,只需添加相应的依赖和配置即可。Consul本身部署也很轻量,支持从单节点开发环境到多节点集群生产环境的灵活扩展。对于中小规模的微服务系统,Consul是一个非常好的选择。 阅读详情

1. Consul简介

Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司使用Go语言开发。
提供了微服务系统中的服务治理、配置中心、控制总线等功能,这些功能每一个都可以根据需要单独使用,也可以一起使用构建全方位的服务网络,总之,Consul提供了一种完整的服务网格解决方案。

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

  • 服务发现:提供HTTP和DNS两种发现方式
  • 健康监测:支持多种协议,HTTP、TCP、Docker、Shell脚本定制化
  • KV存储:key , Value的存储方式
  • 多数据中心:Consul支持多数据中心
  • 可视化Web界面

2. Consul安装

教程:https://www.springcloud.cc/spring-cloud-consul.html

2.1 docker版

下载地址:https://www.consul.io/downloads.html
太慢可以使用docker安装

docker pull consul:1.6.1
docker run --name consul -p 8500:8500  -d consul:1.6.1

访问:consul所在主机ip:8500
在这里插入图片描述

2.2 Windows 版

  • 下载完成后只有一个consul.exe文件,硬盘路径下双击运行,查看版本信息
consul --version
  • 使用开发模式启动
consul agent -dev

访问:http;//localhost:8500

3 服务提供者

3.1 建module

新建 cloud-providerconsul-payment8006 模块

3.2 改POM

<?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>spring-cloud-demo</artifactId>
        <groupId>com.lele.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-providerconsul-payment8006</artifactId>

    <dependencies>
        <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.3 建yml

server:
  port: 8006

spring:
  application:
    name: consul-provider-payment

# consul注册中心地址
  cloud:
    consul:
      host: localhost #consul所在服务器的ip
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}
        heartbeat:
          enabled: true

3.4 主启动类

package com.lele.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author: lele
 * @date: 2021/3/12 7:17
 * @description:
 */
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {

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

3.5 controller

package com.lele.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

/**
 * @author: lele
 * @date: 2021/3/12 7:19
 * @description:
 */
@RestController
@Slf4j
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @RequestMapping(value = "/payment/consul")
    public String paymentConsul() {
        return "spring cloud with consul:" + serverPort + "\t" + UUID.randomUUID().toString();
    }
}

3.6 测试

启动 8006,访问 http://localhost:8006/payment/consul
在这里插入图片描述

4. 服务消费者

4.1 建module

新建 cloud-consumerconsul-order80 模块

4.2 POM

<?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>spring-cloud-demo</artifactId>
        <groupId>com.lele.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumerconsul-order80</artifactId>

    <dependencies>
        <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>

4.3 yml

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        heartbeat:
          enabled: true

4.4 主启动类

package com.lele.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author: lele
 * @date: 2021/3/13 18:49
 * @description:
 */
@SpringBootApplication
@EnableDiscoveryClient  //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderConsulMain80.class, args);
    }
}
  • ApplicationContextConfig
package com.lele.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;

/**
 * @author: lele
 * @date: 2021/3/13 18:56
 * @description:
 */
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

4.5 controller

package com.lele.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

/**
 * @author: lele
 * @date: 2021/3/13 19:00
 * @description:
 */
@RestController
@Slf4j
public class OrderConsulController {
    public static final String INVOKE_URL = "http://consul-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/consul")
    public String paymentInfo() {
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
        return result;
    }
}

4.6 测试

启动 8006,访问 http://localhost:8006/payment/consul;
在这里插入图片描述

再启动 Consul80,访问 http://localhost/consumer/payment/consul
在这里插入图片描述

5. 三个注册中心异同点

CAP

  • C:Consistency(强一致性)
  • A:Availability(可用性)
  • P:Partition tolerance(分区容错)
    CAP理论关注粒度是数据,而不是整体系统设计的策略。

经典CAP图

  • 最多只能同时较好的满足两个;
  • CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:
    • CA-单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
    • CP-满足一致性,分区容错性的系统,通常性能不是特别高
    • AP-满足可用性,分区容错性的系统,通常可能对一致性要求低一些。
      在这里插入图片描述

AP(Eureka)
AP架构,当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
结论:违背了一致性C的要求,只满足了可用性和分区容错,即AP。
在这里插入图片描述

CP(Zookeeper/Consul)
CP架构,当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性
结论:违背了可用性A的要求,只满足一致性和分区容错,即CP。
在这里插入图片描述

SpringCloud之注册中心Consul使用详解 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部。 阅读详情

相关推荐

consul服务注册与发现、服务配置与刷新

为什么要用服务注册?为什么要用consul不用eureka?

Apollo 2011

SpingCloud系列之Consul详解

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级

SayBlog 1423

Spring Cloud入门系列(五)——服务注册与发现之Consul(已停更,建议切换到Nacos)

Consul是什么 Consul能干什么 如何使用 官网下载链接:https://www.consul.io/downloads 官方使用文档:https://docs.spring.io/spring-cloud-consul/docs/2.2.7.RELEASE/reference/html/ 默认端口是 8500 Eureka,Zookeeper,Consul异同点 这就要提及 经典的CAP理论了。 因为是分布式架构,所以P一定要保证。 因此分布式架构只有两种,就是 AP 和 CP AP架构

会者定离,一期一祈 758

SpringCloud 之 consul

Table of Contents Consul 基础概念 consul与eureka比较 将基于SpringBoot的微服务应用注册到Consul上成为服务提供者 从consul中安全注销服务实例 Consul 基础概念 Consul 是一个分布式高可用的系统,它包含多个组件,但作为一个整体在微服务架构中提供服务发现和服务配置的工具。Spring Cloud Consul 项目是针对...

tengxvincent的博客 5729

Spring Cloud 微服务架构:服务注册与发现、配置中心搭建

服务注册与发现以及配置中心是 Spring Cloud 微服务架构中不可或缺的重要组件。服务注册与发现机制确保了微服务之间能够准确、高效地通信,提高了系统的灵活性和可扩展性;配置中心实现了配置信息的集中管理和动态更新,简化了微服务的配置管理过程,提高了系统的可维护性和安全性。在实际项目中,开发者可以根据项目的具体需求和特点,选择合适的服务注册中心和配置中心组件。

数字魔方操控师的博客 1628

Spring Cloud入门-Consul服务注册发现与配置中心(Hoxton版本)

Spring Cloud Consul 为 SpringBoot 应用提供了 Consul的支持,Consul既可以作为注册中心使用,也可以作为配置中心使用,本文将对其用法进行详细介绍。Consul 简介Consul是HashiCorp公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

2501_90193795的博客 1267

VS Code开发Spring Boot + Cloud示例(五)服务注册和发现示例(Docker + Consul)

运行环境: Windows 10 专业版 Docker for Windows 18.06.0-ce(安装方法参见win10环境下安装Docker) 主要参考文章《springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解》 1 我对Consul的理解 Consul是什么,为什么用Consul,请大家看上面提到的Consul...

hugowang的博客 1657

Spring Cloud Consul服务发现与配置管理

      Spring Cloud Consul组件提供服务注册与发现(Eureka),分布式配置(config),控制总线(Bus)特性,也可以与zuul,ribbon,hystrix集成。       这里主要讲下它的服务注册与发现,分布式配置。       首先,我们要安装consul,这里不介绍,Spring boot 版本1.5.13.RELEASE,Spring Cloud版本Edg...

陈俊的马蹄印 6855

Spring Cloud 服务注册与发现 Consul

服务注册:将服务实例的元信息(如 IP 地址、端口号)注册到注册中心,供其他服务调用。服务发现:服务消费者通过注册中心获取目标服务的位置信息,并完成调用。服务注册与发现:通过 HTTP 或 DNS 提供服务注册与发现能力。分布式 KV 存储:支持配置管理。健康检查:监控服务状态,确保请求只发送到健康的实例。多数据中心支持:支持跨数据中心的服务发现。Spring Cloud 与 Consul 的结合提供了一种高效、灵活的服务注册与发现解决方案。

Flying_Fish_roe的博客 1419

SpringCloud面试题----服务注册和发现是什么意思?Spring Cloud如何实现

SpringCloud面试题----服务注册和发现是什么意思?Spring Cloud如何实现

qq_38737545的博客 2413

Spring Cloud与Consul服务发现

Consul服务发现Consul是一个开源的服务注册发现工具,采用Go语言开发,支持多数据中心分布式高可用的服务发现和配置共享,广泛应用在大规模分布式系统中。Spring Cloud原生支持使用Consul做服务注册发现,类似Eureka、ZooKeeper。下载 Consul 软件,对其运行consul agent -dev,启动开发模式在项目中添加依赖compile('org.springfra

云中采薇 3076

使用Spring Cloud Consul实现微服务注册与发现的全面指南

Spring Cloud Consul 是 Spring Cloud 生态系统中的一个组件,它集成了 HashiCorp 的 Consul,提供了服务注册与发现、配置管理、健康检查等功能。Consul 是一个支持分布式、高可用性和多数据中心的服务网格(Service Mesh),并通过一个中心化的服务注册表来存储和管理服务实例的信息。通过使用 Spring Cloud Consul,微服务架构能够更高效地实现服务注册与发现、配置管理和健康检查。

weixin_41859354的博客 1413

spring cloud搭建微服务second-fiberhome(二):结合consul实现服务注册与服务发现

spring cloud官方耦合度最好的服务注册于服务发现是eureka。但是在实际应用中,consul服务既能结合spring cloud又能结合其他服务进行服务注册与服务发现,同时功能点强于eureka,对于consul与eureka的优缺点,在此不做介绍。下文使用consul结合spring cloud进行服务注册与服务发现。 consul安装包:consul_0.8.3_windows_am

moyu_2012的博客 2993

Spring Cloud 服务注册与发现

介绍 Eureka 与 Consul

每篇博客都不是最终版,都会随着我的学习更新 1615

Spring Boot整合Consul实现服务注册与发现

微服务架构是一种将单体应用拆分为多个小型、独立服务的设计模式,每个服务运行在其独立的进程中,并通过轻量级通信机制进行交互。相较于传统单体架构,微服务具备更高的灵活性、可扩展性与可维护性。在微服务架构中,服务数量剧增带来了服务发现、配置管理、负载均衡等挑战,因此服务治理成为关键。Consul作为一款优秀的服务发现与配置管理工具,提供了服务注册、健康检查、KV存储等核心功能,帮助系统实现自动化治理。

weixin_42578963的博客 999

保姆级教程:用微信小程序+OneNet MQTT API,5分钟搞定温湿度数据实时展示

本文提供了一份详细的教程,教你如何利用微信小程序和OneNet MQTT API在5分钟内实现温湿度数据的实时展示。从OneNet平台配置到小程序数据绑定,手把手指导零基础开发者快速搭建监控系统,涵盖API调用、数据解析和界面设计等关键步骤。

weixin_30298497的博客 368

SpringCloud——Consul服务注册与发现

SpringCloud——Consul服务注册与发现

weixin_74019079的博客 1649

TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

HRPWM的学习记录。

whyorwhnt的专栏 9534

Spring Cloud Consul安装+服务注册与发现+服务配置与刷新

Consul 是由 HashiCorp 开发的一款开源的服务发现与配置管理工具,专为现代分布式系统和微服务架构设计。它通过提供服务发现、健康检查、键值存储、多数据中心支持等功能,帮助开发者构建高可用、可扩展的分布式系统。

张同学的博客 1454

堆内存管理核心逻辑 超详细复习笔记

本文详细解析了堆内存管理的核心逻辑,包括初始化、分配和释放三个关键环节。系统通过全局堆管理结构体和链表机制实现动态内存管理:初始化时标记整块内存为空闲;分配时遍历链表查找合适空闲块并进行分割;释放时定位内存块头并重新标记为空闲,支持相邻块合并以减少碎片。文章对比了链表式管理和线性分配的优缺点,指出链表式更灵活但实现复杂,线性分配简单但无法释放。最后总结了常见错误(如指针回推错误、碎片问题)和扩展知识(不同内存管理算法)。这套机制是理解嵌入式系统和RTOS内存管理的基础。

2502_92009732的博客 1196

航空电子系统标准全景图:ARP4754A、ARP4761、DO-178C、DO-254 的协同作用

通过 ARP4754A、ARP4761、DO-178C 和 DO-254 的相互配合,确保航空电子系统的安全性和功能性在开发过程中得到充分保障。每一个文件在不同层面发挥作用,共同构成了一个完整的、系统的开发和验证框架,确保航空电子设备达到适航要求。这些标准不仅帮助开发人员有条理地开发复杂的航空系统,还确保所有系统组件(软件和硬件)在整个生命周期内都能满足最严格的安全和可靠性要求。

qq_41854911的博客 1812

Consul服务注册与发现

Consul服务注册与发现,下载和安装Consul,新建提供者和消费者通过Consul进行服务的注册和发现

m0_62946761的博客 2万+

第1章:认识OpenClaw

OpenClaw是一个开源的 AI 智能体 Gateway 网关项目名称演变:OpenClaw 原名 Clawdbot,因 Anthropic 商标顾虑在 2026年1月27日更名为 Moltbot(过渡名),最终在1月30日确定为 OpenClaw。三个名字本质是同一个项目,功能完全一致。🏠在你的电脑上运行:完全本地部署,数据隐私有保障📁访问本地文件:可以搜索、读取、编辑你电脑上的文件🔌扩展能力:通过Skills(技能)系统无限扩展功能💬多平台使用。

Maynor的博客 2832
上一篇: docker上安装zookeeper
下一篇: Spring Cloud(六):Ribbon负载均衡服务调用
红枫忆梦
博客等级 码龄8年 117粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值