微服务-服务注册中心

news/2024/10/25 17:19:58/

概念

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

在这里插入图片描述

类比之前的例子就是,餐馆管理者,管理大家的考勤签到等功能,员工到了要去管理者那里签个到,并且告诉他你是负责什么业务的,比如说负责切菜。他就把你放到切菜的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: 7001eureka:instance:hostname: localhost #eureka服务端的实例名称client:#false表示不向注册中心注册自己。register-with-eureka: false#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务fetch-registry: falseservice-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: trueservice-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.comclient:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://eureka7002.com:7002/eureka/  #相互注册server:port: 7002
eureka:instance:hostname: eureka7002.comclient:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://eureka7001.com:7001/eureka/  #相互注册

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

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

eureka:client:register-with-eureka: truefetchRegistry: trueservice-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: 80spring:application:name: nacos-consumer-ordercloud: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的负载均衡算法调用服务进行尝试。


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

相关文章

基于SSH(Struts+Spring+Hibernate)实现汽修管理系统《建议收藏:附完整源码+数据库》

文章目录 一、登陆系统(1)需用用户填写的登陆信息:(2)登陆操作进行了严格的判断:a:当用户没有输入任何信息就直接点击“登陆”进行登陆的时候,会根据输入框的顺序依次进行判断:b: 当用户开始输入信息点击“登陆”进行登陆的时候,会根据输入框的顺序再次进行判断:二、…

rviz添加qt插件

一、增加rviz plugin插件 资料&#xff1a;http://admin.guyuehome.com/42336 https://blog.51cto.com/u_13625033/6126970 这部分代码只是将上面两个链接中的代码整合在了一起&#xff0c;整合在一起后可以更好的理解其中的关系 1、创建软件包 catkin_create_pkg rviz_tel…

element-Cascader级联选择器用法?

html <el-form-item label"行业选择" :label-width"formLabelWidth"><div class"m-4"><el-cascader v-model"form.tradeid" :options"options" :props"props" /></div></el-form-ite…

【Python 千题 —— 基础篇】菜品的价格

题目描述 题目描述 食堂今天准备了很多好吃的菜。“beef” 12 元一份&#xff1b;“rice” 1 元一份&#xff1b;“fish” 8 元一份&#xff1b;其它菜品 5 元一份。请你根据输入的字符串&#xff0c;使用 if-elif-else 语句判断该菜品需要花费多少钱。 输入描述 输入一个菜…

uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次

目录 前言&#xff1a; html部分 js部分 完整代码 前言&#xff1a; 一时兴起&#xff0c;不喜勿喷&#xff0c;今天听到了这个问题想到了一个方法&#xff0c;解决方式如下。 html部分 他用于显示访问次数&#xff08;visitCount变量的值&#xff09;。 <template&…

2023.11.7: OpenAI DevDay总结

New Model&#xff1a;ChatGPT4.0 turbo 更长的context&#xff1a;支持长达128000个tokens的context 更好的控制方案&#xff1a; 更有利于API调用JSON Mode Function calling Reproducible outputs 通过一个seed使得模型的回答总是保持一致 Better Knowledge 支持知识检索…

Java面试题04

1.Array 和 ArrayList 有何区别&#xff1f; Array是固定长度的&#xff0c;元素类型可以是基本类型&#xff0c;创建后大小不可改变&#xff1b;ArrayList是可变长 度的&#xff0c;只能存储对象&#xff0c;可以动态添加和删除元素。 区别1&#xff1a; 存储类型不同 …

在gitlab中指定自定义 CI/CD 配置文件

文章目录 1. 介绍2. 配置操作3. 配置场景3.1 CI/CD 配置文件在当前项目step1&#xff1a;在当前项目中创建目录&#xff0c;编写流水线文件存放在该目录中step2&#xff1a;在当前项目中配置step3&#xff1a;运行流水线测试 3.2 CI/CD 配置文件位于外部站点上step1&#xff1a…