cloud-(Nacos)--注册中心原理-服务注册-服务发现

news/2024/10/5 6:48:16/

并且通过(RestTemplate)Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题

在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了注册中心的概念。注册中心、服务提供者、服务消费者三者间关系如下:

流程如下:

  • 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心

  • 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)

  • 调用者自己对实例列表负载均衡,挑选一个实例

  • 调用者向该实例发起远程调用

当服务提供者的实例宕机或者启动新实例时,调用者如何得知呢?

  • 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)

  • 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除

  • 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表

  • 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表

注册中心原理

在微服务远程调用的过程中,包括两个角色:

  • 服务提供者:提供接口供其它微服务访问,

  • 服务消费者:调用其它微服务提供的接口,

总结:

服务治理中的三个角色分别是什么?

  • 服务提供者:暴露服务接口,供其他服务调用
  • 服务消费者:调用其它服务提供接口
  • 注册中心:记录并监控服务各实例状态,推送服务变更信息

消费者如何知道提者的地址

  • 服务提供者会在启动时注册自己信息到注册中心消费者可以从注册中心订阅和拉取服务信息

消费者如何得知服务状态变更

  • 服务提供者通过心跳机制向注册中心报告自己的健康状态当心跳异常时注册中心会将异常服务剔除并通知订阅了该服务的消费者

当提供者有多个实例时,消费者该选择哪一个?

  • 消费者可以通过负载均衡的算法从多个实例中选择一个

nacos注册中心:

我们基于Docker来部署Nacos的注册中心,首先我们要准备MySQL数据库表,用来存储Nacos的数据。由于是Docker部署,所以大家需要将资料中的SQL文件导入到你Docker中的MySQL容器中:

sql如下:

-- --------------------------------------------------------
-- 主机:                           192.168.150.101
-- 服务器版本:                        8.0.27 - MySQL Community Server - GPL
-- 服务器操作系统:                      Linux
-- HeidiSQL 版本:                  12.2.0.6576
-- --------------------------------------------------------/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;-- 导出 nacos 的数据库结构
DROP DATABASE IF EXISTS `nacos`;
CREATE DATABASE IF NOT EXISTS `nacos` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `nacos`;-- 导出  表 nacos.config_info 结构
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE IF NOT EXISTS `config_info` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',`group_id` varchar(128) COLLATE utf8_bin DEFAULT NULL,`content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',`md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text COLLATE utf8_bin COMMENT 'source user',`src_ip` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',`app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL,`tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',`c_desc` varchar(256) COLLATE utf8_bin DEFAULT NULL,`c_use` varchar(64) COLLATE utf8_bin DEFAULT NULL,`effect` varchar(64) COLLATE utf8_bin DEFAULT NULL,`type` varchar(64) COLLATE utf8_bin DEFAULT NULL,`c_schema` text COLLATE utf8_bin,`encrypted_data_key` text COLLATE utf8_bin NOT NULL COMMENT '秘钥',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='config_info';-- 正在导出表  nacos.config_info 的数据:~0 rows (大约)
DELETE FROM `config_info`;-- 导出  表 nacos.config_info_aggr 结构
DROP TABLE IF EXISTS `config_info_aggr`;
CREATE TABLE IF NOT EXISTS `config_info_aggr` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',`

http://www.ppmy.cn/news/1534811.html

相关文章

ROS2 launch时根据xacro生成urdf

ROS2 launch时根据xacro生成urdf 文章目录 前言正文 前言 本文简单记录如何在ros2 launch时生成urdf并保存到目标目录。 正文 from launch.substitutions import Command, FindExecutable, PathJoinSubstitution from launch_ros.substitutions import FindPackageSharedef …

建筑资质的未来发展趋势

🏗️建筑资质是建筑企业进入市场的通行证,它不仅关系到企业的竞争力,也影响着整个建筑行业的健康发展。随着政策的调整和技术的进步,建筑资质管理正面临着新的变革。 1. 资质管理的数字化转型:🌐 随着信息技…

SpringCloud入门(十二)全局过滤器和跨域

一、全局过滤器 全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义,处理逻辑是固定的,如果我们希望拦截请求,做自己的业务逻辑则没办法实现。而GlobalFilt…

【51单片机】点亮LED之经典流水灯

开发环境 开发板:普中51-单核-A2单片机:STC89C52RC(双列直插40引脚 DIP40)Keil uVision5 v9.61 最新版破解方法自行百度,相关文档和视频资料很多,我自己将这一操作记录下来当做博客发布,CSDN以…

springcloud 面试题

什么是微服务? 本文导图:SpringCloud 梳理-ProcessOn 分布式架构CAP理论 CAP定理是分布式系统中最基础的原则,所以理解和掌握了CAP对系统架构的设计至关重要。分布式架构下所有系统不可能同时满足以下三点:Consisteny&#xff08…

多模态—文字生成图片

DALL-E是一个用于文字生成图片的模型,这也是一个很好思路的模型。该模型的训练分为两个阶段: 第一阶段:图片经过编码器编码为图片向量,当然我们应该注意这个过程存在无损压缩(图片假设200*200,如果用one-h…

【Maven】依赖管理,Maven仓库,Maven核心功能

Maven 是一个项目管理工具,基于 POM(Project Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件 大白话:Maven 是一个项目管理工…

自动驾驶-轨迹拼接

自动驾驶在进行规划之前,要确定当前帧轨迹规划的起点,这个起点常被误认为是当前车辆的位置,即每次以车辆的当前位置进行轨迹规划;其实不是这样的,直观上,这会导致本次次规划的轨迹同上次规划的轨迹之间是不…