微服务-服务注册中心

概念

服务注册中心相当于我们例子中说的餐馆管理者,负责服务实例的注册、心跳、简单的负载均衡等功能,同一个服务的不同实例,在注册中心中使用同一个名称。在调用时根据名称找到具体的实例执行具体的任务。如果实例长时间没有心跳,将实例剔除,只保留可用的实例。

在这里插入图片描述

类比之前的例子就是,餐馆管理者,管理大家的考勤签到等功能,员工到了要去管理者那里签个到,并且告诉他你是负责什么业务的,比如说负责切菜。他就把你放到切菜的service里。如果需要切菜了,管理者根据简单的轮询规则,依次叫切菜的员工去切菜。如果你长时间没有应答他。他认为你不想干了,把你踢出去。

这样保证了一个服务(切菜)有多个实例同时执行,在高并发的场景下,有很多的服务提供者分担了压力。并且更加稳定,比如其中有的关机了,有的出故障了,不影响服务的正常运行。

服务注册中心本身也是一个服务,它也有罢工的可能性。如果单机部署,也给系统带来了很大的风险,所以一般注册中心也采用集群部署,至少三台。

实操

可以完成服务注册中心功能的插件有Eureka(停更)、Zookepper、Consul、Nacos。Eureka应该是以前最火的,但是停更了,现在应该大多使用Nacos,也很好用。用这两个演示注册中心的使用。

主要分为以下两步:

  1. 服务注册中心创建
  2. 注册进入注册中心

Eureka

Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:

  • Eureka Server:
    Eureka 服务注册中心,主要用于提供服务注册功能。当微服务启动时,会将自己的服务信息注册到 Eureka Server。Eureka Server 维护了一个可用服务列表,存储了所有注册到 Eureka Server 的可用服务节点的信息,服务节点的信息可以在 Eureka Server 的管理界面中直观看到。
  • Eureka Client:
    Eureka 客户端,通常指的是微服务系统中各个微服务,主要用于和 Eureka Server 进行交互。在微服务应用启动后,Eureka Client 会向 Eureka Server 发送心跳(默认周期为 30 秒)。若 Eureka Server 在多个心跳周期内没有接收到某个 Eureka Client 的心跳,Eureka Server 将它从可用服务列表中移除(默认 90 秒)。

默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例,互相之间通过增量复制的方式,来实现服务注册表中数据的同步。Eureka Server默认保证在90秒内,Eureka Server集群内的所有实例中的数据达到一致。从这个架构来看,Eureka Server所有实例所处的角色都是对等的,没有类似Zookeeper、Consul、Etcd等注册中心的选举过程,也不存在主从,所有的节点都是主节点。Eureka官方将Eureka Server集群中的所有实例称为 “对等体”。

Eureka服务注册中心创建

  1. Idea鼠标右键创建Model
    在这里插入图片描述

  2. 修改pom.xml,添加依赖

<!--eureka-server-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

  1. 修改yml
server:
  port: 7001

eureka:
  instance:
    hostname: localhost #eureka服务端的实例名称
  client:
    #false表示不向注册中心注册自己。
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  1. 修改主启动类
@SpringBootApplication
@EnableEurekaServer	//关键注解
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

  1. 测试
    打开浏览器,访问localhost:7001,可以看到如下页面即可。注意7001是我们自己配置的端口,不重复即可,可以任意配置。
    在这里插入图片描述

Eureka客户端

  1. 新建Model
    idea右键新建新的model,作为要注册进Eureka的service服务。
  2. 修改pom
    添加客户端依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

  1. 修改yml
server:
  port: 8001
spring:
  application:
    name: clound-payment-service	#注册进服务的service名称

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。
    #单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka	 #EurekaServer地址

  1. 主启动类
@SpringBootApplication
@EnableEurekaClient
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

  1. 测试
    成功启动客户端以后,服务端可以看到成功注入的服务实例。
    在这里插入图片描述
    再注册进入一个8002,效果如下:
    在这里插入图片描述

集群配置

新建model,端口号7002,主要修改application.yml配置文件,7001,7002互相注册进入对方的服务中。

server:
  port: 7001
eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/  #相互注册

server:
  port: 7002
eureka:
  instance:
    hostname: eureka7002.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/  #相互注册

在7001服务上可以看到7002注册进来,如果还有7003,7004以此类推,服务注册到其他所有服务上。客户端注册到所有服务上
在这里插入图片描述

修改8001、8002注册进入集群,修改application.yml配置文件

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka 单机版
      #集群版
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/ 

Nacos服务端

Nacos不需要我们自己创建Model写server,直接到官网下载应用即可。
在这里插入图片描述
解压缩,进到bin目录下,看到启动脚本如下:
在这里插入图片描述
在此目录下执行:

startup.cmd -m standalone

在这里插入图片描述
浏览器打开控制台提示的地址:
在这里插入图片描述

Nacos客户端

  • 新建Model
    idea右键新建

  • 修改pom
    新增客户端包,Nacos集成了Ribbon,自带负载均衡算法。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

  • 修改yaml
server:
  port: 80

spring:
  application:
    name: nacos-consumer-order
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  #注册进Nacos

  • 主启动类
@SpringBootApplication
@EnableDiscoveryClient  //开启服务注册与发现功能
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

  • 测试
    启动成功后可以在服务列表中看到我们启动的服务,以及实例数量等信息。使用服务名调用时自带负载均衡功能。

在这里插入图片描述

后面我们将消费者也注册进服务注册中心,并且使用ribbon和feign的负载均衡算法调用服务进行尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124808.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项和动量因子

11-08 周三 图解机器学习之实现逻辑异或&#xff0c;理解输出层误差和隐藏层误差项 时间版本修改人描述2023年11月8日14:36:36V0.1宋全恒新建文档 简介 最近笔者完成了《图解机器学习》这本书的阅读&#xff0c;由于最近深度学习网络大行其是&#xff0c;所以也想要好好的弄清…

2023.11.09 homework

4年级数学&#xff1a;不会做就作图&#xff0c;画出来&#xff0c;简单化就容易懂 2023.11.09 homework &#xff08;2&#xff09;-CSDN博客

Langchain-Chatchat实践详解

简介 本质上是在Langchain基础上封装的一层聊天服务&#xff0c;可以对接底层多种离线LLM和在线的LLM&#xff08;也可以对接自定义的在线LLM&#xff09;。提供基于知识库聊天功能相关的一系列API。 下载源码 源码地址&#xff1a; https://github.com/chatchat-space/Lang…

QT第2课-GUI程序实例分析

GUI程序开发概述 不同的操作系统GUI开发原理相同不同的操作系统GUI SDK 不同 GUI 程序开发原理 GUI程序在运行时会创建一个消息队列系统内核将用户的键盘鼠标操作翻译成对应的程序消息程序在运行过程中需要实时处理队列中的消息当队列中没有消息时&#xff0c;程序将处于停滞…

微信小程序自动化采集方案

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;拒绝转载&#xff0c;若有侵权请联系我删除&#xff01; 一、引言 1、对于一些破解难度大&#xff0c;花费时间长的目标&#xff0c;我们可以先采用自动化点击触发请求&…

Read-Easy Excel源码解析(一)

Read&Write-Easy Excel 当我们需要导入大Excel时候&#xff0c;用POI会内存溢出&#xff0c;这时候我们用EasyExcel来解决&#xff0c;它底层采用的是SAX&#xff08;Simple Api for Xml&#xff09;事件驱动&#xff0c;解析xml的方式来解析excel文件。 首先我们看他的re…

c++ 信奥编程 1129:统计数字字符个数

#include<bits/stdc.h> using namespace std; int main() {string arr; //定义变量 arr getline(cin, arr); //通过函数输入并存储到变量中 int a 0; // 定义变量a&#xff0c;并赋初值0for(int i 0; i < arr.length(); i){ if(arr[i] < 57 && arr[i] &…

《视觉SLAM十四讲》-- 相机与图像

04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后&#xff0c;在针孔背面投影成像的关系&#xff08;类似小孔成像原理&#xff09;。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…

C【整数正序分解】

// 整数正序分解 #include <stdio.h> #include <stdlib.h>int main() {int x;scanf("%d", &x);// 13425/10000->1(int一个d)// 13425%10000->3425(这是x)// 10000/10-.1000(这是mask)int mask 1;int t x;while (t > 9){t / 10;mask * 10;…

【数据结构初级(2)】单链表的基本操作和实现

文章目录 Ⅰ 概念及结构1. 单链表的概念2. 单链表的结构 Ⅱ 基本操作实现1. 定义单链表结点2. 创建新结点3. 单链表打印4. 单链表尾插5. 单链表头插6. 单链表尾删7. 单链表头删8. 单链表查找9. 在指定 pos 位置前插入结点10. 删除指定 pos 位置的结点11. 单链表销毁 本章实现的…

计算机二级公共基础

知识点 1.树 树的最大层次&#xff08;最长路径的长度&#xff09;称为树的深度 二叉树的后件最多不超过两个 满二叉树&#xff1a;除最后一层每一层的所有节点都有两个子节点。&#xff08;满二叉树一定是完全二叉树&#xff09; 完全二叉树&#xff1a;所有节点均达到最大数…

vue3怎么获取el-form的元素节点

在元素中使用ref设置名称 在ts中通过从element-plus引入formInstance,设置formRef同名名称字段来获取el-form节点

疏散及应急照明灯在地下建筑中的运用探析

安科瑞 华楠 摘要&#xff1a;新型疏散及应急照明灯在地下建筑中的有效应用&#xff0c;可以有效的促使地下建筑提升自身的安全性能&#xff0c;尤其是在发生火灾时&#xff0c;改变传统的应急疏散的局限性&#xff0c;充分发挥出自身的新型特殊功能&#xff0c;为人们提供更为…

ElementUI-tree拖拽功能与节点自定义

前言 在管理端会遇到多分类时&#xff0c;要求有层次展示出来&#xff0c;并且每个分类有额外的操作。例如&#xff1a;添加分类、编辑分类、删除、拖到分类等。 下面将会记录这样的一个需求实习过程。 了解需求 分类展示按层级展示分类根据特定的参数展示可以操作的按钮&a…

基于SpringBoot+Vue的婚恋相亲交友系统

基于SpringBootVue的婚恋相亲交友系统~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 摘要 基于SpringBootVue的婚恋相亲交友系统是一个现代化的、高效的交…

使用bitmap实现可回收自增id

需求描述 设计一个方法&#xff0c;每次调用返回一个自增id&#xff0c;同时需要满足以下要求。 可更新id的状态为已使用&#xff0c;已使用的id下次调用时不再返回可修改某个id的状态为未使用&#xff0c;下次调用时设为未使用状态的id可重新被返回 思路 思路一&#xff1…

全志T507-H技术帖 | 去掉IO扩展芯片后保留扩展引脚功能的实现方法

飞凌嵌入式推出的OKT507-C作为一款广受欢迎的开发板拥有丰富的功能接口&#xff0c;而实际上OKT507-C开发板的CPU引脚资源是比较紧缺的&#xff0c;那么它究竟是如何提供如此丰富的接口资源的呢&#xff1f;答案就是IO扩展芯片——TCA6424A。 这是一个24 位 I2C 和系统管理总线…

第三方商城对接项目(202311)

文章目录 1. 项目背景和目标2. 项目成果3. 项目经验总结4. 展望和建议 1. 项目背景和目标 竞标成功接口对接第三方商城&#xff0c;商品&#xff0c;订单&#xff0c;售后尽快完成对接 2. 项目成果 完成整个项目功能流程对接新业务功能移交项目等业务部门使用 3. 项目经验总…

MySQL中表的增删查改(进阶),超详细!

目录 一、数据库的约束 1、约束类型 2、NULL约束 3、UNIQUE&#xff1a;唯一约束 4、DEFAULT&#xff1a;默认值约束 5、PRIMARY KEY&#xff1a;主键约束&#xff08;主键只能定义一个&#xff0c;NOT NULL 和 UNIQUE 的结合&#xff09; 6、FOREIGN KEY&#xff1a;外键约…

C++之List容器

1.list容器简介 list是序列容器&#xff0c;允许在序列中的任何位置执行固定O(1)时间复杂度的插入和删除操作&#xff0c;并在两个方向进行迭代。list容器是一个双向循环链表。 list容器与vector容器区别&#xff1a; ①list中空间是随机的&#xff0c;通过指针域保存下一个成员…