【SpringCloud】服务注册与发现

news2024/9/23 15:30:19

目录

  • Eureka/注册中心
    • 简介
    • 模式
  • 使用Eureka实现注册中心
    • 1.创建一个名称为demo-eureka-server的Spring Boot项目
    • 2.添加项目依赖
    • 3. 在启动类添加启动注解
    • 4.添加配置信息
    • Eureka的自我保护机制
    • 为Eureka Server添加用户认证
      • 1.添加依赖
      • 2. 添加配置信息
      • 3.添加放行代码
      • 4.启动服务,出现登录页面
    • Eureka的集群配置
      • 原因
      • 思路
      • 实现Eureka的集群配置
        • 准备
        • 步骤
  • Eureka注册与发现步骤
    • 注册Provider微服务到Eureka Server
      • 创建项目
      • 依赖
      • 添加启动注解:@EnableDiscoveryClient
      • 添加配置信息
    • 注册Consumer微服务到Eureka Server
      • 创建项目
      • 添加依赖
      • 添加启动注解:@EnableDiscoveryClient
      • 添加配置信息
  • 面试题
    • 谈谈你对Spring Boot和Spring Cloud的理解?
    • Eureka和Zookeeper都可以提供服务的注册与发现,说说它们的区别?
    • 谈谈Dubbo和Spring Cloud的区别?

Eureka/注册中心

简介

  • Eureka是Spring Cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)和P(分区容错性)。
  • Eureka是Netflix中的一个开源框架。它和 Zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。
  • 一个Eureka中分为Eureka Server和EurekaClient
    • Eureka Server
      • 提供服务注册与发现服务
    • Eureka Client
      • Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到;
      • Service Consumer服务消费方,从Eureka获取注册服务列表,从而能够消费服务。

模式

在这里插入图片描述

使用Eureka实现注册中心

1.创建一个名称为demo-eureka-server的Spring Boot项目

在这里插入图片描述

2.添加项目依赖

在这里插入图片描述

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    ...
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3. 在启动类添加启动注解

@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class DemoEurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoEurekaServerApplication.class, args);
    }
}

4.添加配置信息

server:
  port: 7776
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 表示自己就是注册中心,主要是维护服务实例,不检索服务
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: true # 开启自我保护
    eviction-interval-timer-in-ms: 5000
spring:
  application:
    name: register-center

Eureka的自我保护机制

  1. 在默认配置中,Eureka Server在默认90s没有得到客户端的心跳则注销该实例,
  2. 但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。
  3. 为了解决这个问题,Eureka 有自我保护机制。
  4. 它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发生了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。

为Eureka Server添加用户认证

1.添加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2. 添加配置信息

server:
  port: 7776
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 表示自己就是注册中心,主要是维护服务实例,不检索服务
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: true # 开启自我保护
    eviction-interval-timer-in-ms: 5000
spring:
  application:
    name: register-center
  security:
    user:
      name: root
      password: root

3.添加放行代码

@SpringBootApplication
@EnableEurekaServer
public class DemoEurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoEurekaServerApplication.class, args);
    }
    @EnableWebSecurity
    static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable();
            super.configure(http);
        }
    }
}

4.启动服务,出现登录页面

在这里插入图片描述

Eureka的集群配置

原因

  1. 在分布式系统中,任何的地方存在单点,整个体系就不是高可用的,Eureka 也一样,而是以集群的方式对外提供服务。
  2. 如果单机版本Eureka服务端宕机,会导致所有服务都无法获取使用,为了保证高可用性,我们需要搭建Eureka集群
  3. 在实际的生产环境中,Eureka 常常是以集群的方式提供服务的,目的就是要保证高可用性,同时它还保证了分区容错性。这也满足了一个健壮的分布式系统所要求的 CAP 理论原则,即 Eureka 保证了高可用性,分区容错性。

思路

  1. Eureka Server同时也可以是Eureka Client,当有多个节点时,如上图1d,1e,1c之间的Eureka Server通过互相复制来同步自己的服务注册表。
  2. Eureka Client也会缓存服务注册表中的信息,这样不用每次请求都查询Eureka Server,降低Eureka Server的压力,即使所有Eureka Server都宕机了,消费者仍然可以根据缓存来完成调用。

在这里插入图片描述

实现Eureka的集群配置

准备

这里为了方便调试,把刚才的权限认证去掉吧

  1. 删除pom中security依赖,重新加载maven
  2. 删除启动类中关于security的配置代码
  3. 删除yml文件中的security的配置信息
步骤
  1. 再复制两个注册中心项目出来
  2. 三个注册中心端口分别是7776,7777,7778
  3. 配置文件中基本不做修改,只是eureka.client.service-url.defaultZone的配置内容要修改
server:
  port: 7776
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false # 不向注册中心注册自己
    fetch-registry: false # 表示自己就是注册中心,主要是维护服务实例,不检索服务
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      # 改为集群配法,另外那个服务也这么配置,配置为其他注册中心的地址
      defaultZone: http://127.0.0.1:7778/eureka/
  server:
    enable-self-preservation: true # 开启自我保护
    eviction-interval-timer-in-ms: 5000
spring:
  application:
    name: register-center
  security:
    user:
      name: root
      password: root

Eureka注册与发现步骤

在这里插入图片描述

注册Provider微服务到Eureka Server

创建项目

指定artifactId为demo-user-provider

依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    ...
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <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>

添加启动注解:@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class DemoUserProviderApplication {

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

添加配置信息

server:
  port: 8081
spring:
  application:
    name: demo-user-provider
eureka:
  client:
    service-url:
      # 要向所有的注册中心都注册才行
      defaultZone: http://localhost:7776/eureka/,http://192.168.2.220:7777/eureka/
    fetch-registry: true
    register-with-eureka: true

注册Consumer微服务到Eureka Server

创建项目

指定artifactId为demo-user-consumer

添加依赖

同上

添加启动注解:@EnableDiscoveryClient

添加配置信息

基本同上

面试题

谈谈你对Spring Boot和Spring Cloud的理解?

  1. Spring Boot 是 基于Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务;
  2. Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专注于快速、方便集成的单个个体,
  3. Spring Cloud是关注全局的服务治理框架;Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现。
  4. Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。

Eureka和Zookeeper都可以提供服务的注册与发现,说说它们的区别?

Eureka和Zookeeper都是用于服务注册与发现的工具,但在实现和使用上有一些区别:

  1. 架构:Eureka是基于RESTful风格的微服务框架Netflix OSS中的一部分,而Zookeeper是一个分布式协调服务。
  2. 功能:Eureka主要用于服务注册与发现,它使用了两个组件,即Eureka Server和Eureka Client。Eureka Server负责服务注册和发现,Eureka Client负责服务注册、心跳和将自身信息注册到Eureka Server。另一方面,Zookeeper不仅可以提供服务注册与发现,还可以用于分布式锁、配置管理等其他用途。
  3. 数据一致性:Eureka在默认情况下采用的是AP(可用性和分区容错性)模型,允许网络分区的存在,但可能导致数据不一致。而Zookeeper采用的是CP(一致性和分区容忍性)模型,可以保证数据一致性,但在网络分区下可能出现服务不可用的情况。
  4. 性能:由于Zookeeper采用的是复制的方式保持数据一致性,所以在写入操作上会有一定的性能开销。而Eureka采用的是异步的方式进行副本同步,所以在写入操作上性能较好。
  5. 社区支持:Eureka是Netflix开源的项目,具有较大的社区支持,相应的文档和教程较为丰富。而Zookeeper是Apache基金会的项目,同样也有相应的社区支持。

综上所述,Eureka更适合于构建基于云端的微服务架构,而Zookeeper则更适合于构建复杂的分布式系统。选择使用哪个工具,应根据具体的需求和项目背景来决定。

谈谈Dubbo和Spring Cloud的区别?

Dubbo和Spring Cloud都是常用的微服务框架,但在实现和使用上有一些区别:

  1. 架构:Dubbo是一款高性能的分布式服务框架,由阿里巴巴开源,采用了RPC(远程过程调用)的方式实现服务间的通信。而Spring Cloud是基于Spring框架的一套微服务解决方案,主要采用HTTP协议和RESTful风格的网络通信方式。

  2. 社区支持:Dubbo是阿里巴巴开源的项目,有较大的社区支持,相应的文档和教程较为丰富。Spring Cloud是Spring团队提供的解决方案,也有广泛的社区支持。

  3. 功能:Dubbo主要关注服务的调用和网络通信,提供了服务注册与发现、负载均衡、容错、服务治理等功能。而Spring Cloud提供了更完善的微服务解决方案,除了服务调用和通信外,还包括服务注册与发现、负载均衡、熔断器、API网关、配置管理、服务监控等功能。

  4. 技术栈:Dubbo的核心技术栈是Java,提供了对Java的良好支持。而Spring Cloud基于Spring框架,可以与各种语言和技术栈进行整合,支持多语言开发。

  5. 使用复杂度:Dubbo相对来说使用起来较为复杂,需要进行服务接口的定义、编写配置文件、引入相关依赖等。Spring Cloud在使用上较为简单,可以通过注解和配置文件来进行服务注册和调用。

综上所述,Dubbo适合于大规模复杂的分布式系统,提供了高性能的服务调用和通信能力。Spring Cloud则提供了更完善的微服务解决方案,更适合于快速构建、开发和部署微服务架构。在选择时,可以根据具体的需求和项目背景来决定使用哪个框架。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NASA数据集——阿尔法喷气式大气实验甲醛(HCHO)数据

Alpha Jet Atmospheric eXperiment Formaldehyde Data 简介 阿尔法喷气式大气实验甲醛数据 阿尔法喷气式大气实验&#xff08;AJAX&#xff09;是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&#xff0c;旨在促进对加利福尼亚、内华达和太平洋沿岸地区的…

春秋云境CVE-2018-7422

简介 WordPress Plugin Site Editor LFI 正文 1.进入靶场 2.漏洞利用 /wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/../../../../../../flag看别人wp做的。不懂怎么弄的&#xff0c;有没有大佬讲一下的

谈谈你对 vue 的理解 ?

1.谈谈你对 vue 的理解 ? 官方: Vue是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层 2. 声明式框架 Vue 的核心特点,用起来简单。那我们就有必要知道命令式和声明式的区别! 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程 声明…

【Chrono Engine学习总结】6-创建自定义场景-6.1-3D场景获取

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 Chrono可以导入自定义的三维模型&#xff0c;所以想自己搭建一个3D仿真环境。过程中遇到了一些问题&#xff0c;记录与整理。 1、3D环境的创建方法 Chrono的Irrlich…

如何从头搭建一个自己的java库并上传到maven官方仓库

创建代码 在代码库根目录执行maven命令&#xff0c;用于快速生成一个基础的Maven项目 mvn archetype:generate \-DgroupIdcom.mycompany \-DartifactIdmy-maven-project \-Dversion1.0.0 \-DarchetypeArtifactIdmaven-archetype-quickstart \-DinteractiveModefalse 这个命令…

初学Echart

创建一个html文件 1.引入 点击链接----快速上手网址&#xff1a;快速上手 - 使用手册 - Apache ECharts 复制这一串【这个是引入echart路径】 引入到这里 2.使用 我们在上一步---点击返回--往下翻---找到完整代码--复制黏贴 复制粘贴后--总体长这样 <!DOCTYPE html> &…

【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了&#xff0c;只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

【学习笔记】计算机组成原理(八)

CPU 的结构和功能 文章目录 CPU 的结构和功能8.1 CPU的结构8.1.1 CPU的功能8.1.2 CPU结构框图8.1.3 CPU的寄存器8.1.4 控制单元CU和中断系统 8.2 指令周期8.2.1 指令周期的基本概念8.2.2 指令周期的数据流 8.3 指令流水8.3.1 指令流水原理8.3.2 影响流水线性能的因素8.3.3 流水…

从0开始带你成为Kafka消息中间件高手---第二讲

从0开始带你成为Kafka消息中间件高手—第二讲 那么在消费数据的时候&#xff0c;需要从磁盘文件里读取数据后通过网络发送出去&#xff0c;这个时候怎么提升性能呢&#xff1f; 首先就是利用了page cache技术&#xff0c;之前说过&#xff0c;kafka写入数据到磁盘文件的时候&…

深入探索:中文字符的编码与转移字符的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;探索字符编码的世界 二、字符编码基础&#xff1a;理解ASCII与Unicode…

面向未来AI算力中心的电能消耗及优化策略

AI苏妲己&#xff1a;面向未来AI算力中心的电能消耗及优化策略 在人工智能&#xff08;AI&#xff09;和大模型技术加速发展的今天&#xff0c;智算中心对电力需求爆发式递增。如何降低这些中心的能耗成本&#xff0c;关于电能消耗趋势、新能源发电、以及源网荷储一体化解决方…

高级卫生专技资格考试报名流程及照片尺寸审核处理指南

高级卫生专业技术资格考试是卫生专业技术人员职业发展的重要环节&#xff0c;它不仅关系到个人职称的提升&#xff08;副高、正高职称&#xff09;&#xff0c;也是对其专业能力和水平的权威认证。随着考试季的临近&#xff0c;许多考生开始关注报名流程及照片尺寸审核处理等细…

代码随想录算法训练营第36期DAY39

道心破碎的一天&#xff0c;继续加油吧&#xff0c;坚持努力。 DAY39 738单调递增的数字 暴力法&#xff1a; 没有想到用int in;i>0;i--来遍历。 class Solution {private: bool checknum(int num){ if(num<10) return true; while(num/10!0){ …

详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)

目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时&#xff0c;附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;其中…

C++ Primer Plus第十八章复习题

1、使用用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar。 class z200 { private:int j;char ch;double z; public:Z200(int jv,char chv&#xff0c;zv) : j(jv), ch (chv), z(zv){} };double x 8.8; std::string s "what a bracing effect ! …

前端---闭包【防抖以及节流】----面试高频!

1.什么闭包 释放闭包 从以上看出&#xff1a;一般函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据 // 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中 2.闭包产生的两种业务场景&#xff1a;防抖、节流 2.1防抖 举…

Mysql教程(0):学习框架

1、Mysql简介 MySQL 是一个开放源代码的、免费的关系型数据库管理系统。在 Web 开发领域&#xff0c;MySQL 是最流行、使用最广泛的关系数据库。MySql 分为社区版和商业版&#xff0c;社区版完全免费&#xff0c;并且几乎能满足全部的使用场景。由于 MySQL 是开源的&#xff0…

【Windows】 IDimager Photo Supreme 2024(图片管理软件)安装教程

软件介绍 IDimager Photo Supreme 2024是一款专业的图片管理软件&#xff0c;旨在帮助用户有效地组织、管理和浏览他们的照片收藏。以下是该软件的一些主要特点和功能&#xff1a; 图片管理&#xff1a;Photo Supreme提供强大的图片管理功能&#xff0c;可以帮助用户轻松地整理…

笔记89:LeetCode_135_分发糖果

前言&#xff1a; 注&#xff1a;代码随想录中没有很清楚的提起想出方法的思路&#xff0c;只是给出了解决这个问题的大致思路和代码&#xff1b;下面我将介绍一下我的思考过程&#xff0c;并贴出实现代码&#xff1b; a a a a 思考过程&#xff1a; 思路1&#xff1a;为了…