【SpringCloud】服务注册与发现

目录

  • 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则提供了更完善的微服务解决方案,更适合于快速构建、开发和部署微服务架构。在选择时,可以根据具体的需求和项目背景来决定使用哪个框架。

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

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

相关文章

springboot+vue+mybatis校园兼职平台+PPT+论文+讲解+售后

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个学生的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

得帆信息PMO总监李健达受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 上海得帆信息技术有限公司aPaaS业务线副总裁、PMO总监李健达先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“AI时代的PMO工作法”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#x…

天干物燥小心火烛-智慧消防可视化大屏,隐患防治于未然。

智慧消防可视化大屏通常包括以下内容&#xff1a; 1.实时监控&#xff1a; 显示消防设备、传感器、监控摄像头等设备的实时状态和数据&#xff0c;包括火灾报警、烟雾报警、温度报警等。 2.建筑结构&#xff1a; 显示建筑物的结构图和平面图&#xff0c;包括楼层分布、消防通…

HDFS 组织架构

优质博文&#xff1a;IT-BLOG-CN 一、HDFS 概述 HDFS 产生背景&#xff1a; 随着数据量越来越多&#xff0c;一个系统存储不下所有的数据&#xff0c;那么就需要分配到多个操作系统的磁盘中进行存储&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机…

技术前沿 |【BLIP:统一理解和生成的自举多模态模型研究】

BLIP&#xff1a;统一理解和生成的自举多模态模型研究 摘要引言一、BLIP模型概述二、 BLIP模型在多模态任务中的应用三、总结 摘要 本文介绍了BLIP&#xff08;Bootstrapping Language-Image Pre-training&#xff09;模型&#xff0c;一个前沿的多模态模型&#xff0c;通过自…

2024 一键批量下载雪球和东方财富文章导出excel和pdf

之前分享过雪球批量下载工具2023 批量下载雪球文章导出pdf&#xff0c;以市场高标解读这个号为例&#xff0c;下载效果&#xff1a; 下载文章后用我开发的htmltopdf.exe批量转换html为pdf&#xff0c;不过要注意不要放在中文目录下&#xff0c;否则提示错误 utf-8 codec cant d…

数据结构之栈和队列(超详解

目录 一.栈 1.栈的基本概念 2.栈的基本操作 3.栈的储存结构 ①栈的顺序储存 (1)基本概念 (2)代码实现 ②栈的链式储存 (1)基本概念 (2)代码实现 二.队列 1.队列的基本概念 2.队列的基本操作 3.队列的储存结构 ①队列的链式储存 (1)基本概念 ​编辑 (2)代码实现 ②…

浅析3D NAND多层架构的可靠性问题

SSD的存储介质是什么&#xff0c;它就是NAND闪存。那你知道NAND闪存是怎么工作的吗&#xff1f;其实&#xff0c;它就是由很多个晶体管组成的。这些晶体管里面存储着电荷&#xff0c;代表着我们的二进制数据&#xff0c;要么是“0”&#xff0c;要么是“1”。 目前业内3D-NAND工…

【吊打面试官系列】Java高并发篇 - ReadWriteLock 是什么 ?

大家好&#xff0c;我是锋哥。今天分享关于 【ReadWriteLock 是什么 &#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; ReadWriteLock 是什么 &#xff1f; 首先明确一下&#xff0c;不是说 ReentrantLock 不好&#xff0c;只是 ReentrantLock 某些时候有局限。 …

【动态规划】斐波那契数列模型(C++)

目录 1137.第N个泰波那契数 解法&#xff08;动态规划&#xff09; 算法流程 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a; 4. 填表顺序&#xff1a; 5. 返回值&#xff1a; C算法代码 优化&#xff1a; 滚动数组 测试&#xff1a; …

bootstrap实现九宫格效果(猫捉老鼠游戏)

最近&#xff0c;孩子的幼儿园让家长体验“半日助教活动”&#xff0c;每个家长需要讲授15-20分钟的课程。作为一名程序员&#xff0c;实在没有能教的课程&#xff0c;只能做了一个小游戏&#xff0c;带着小朋友们熟悉数字。 效果大致是这样的。九宫格的左上角是一只小猫图片&…

一张图片中有多个一样的目标物体,分别进行识别定位分割(Python实现)

需求&#xff1a; 一张图片中有多个目标物体&#xff0c;将多个目标物体进行识别分割定位 import cv2 import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img_path r"test3.png" img cv2.imread(img…

社交媒体数据恢复:聊天宝

请注意&#xff0c;本教程仅针对聊天宝应用程序&#xff0c;而非其他聊天软件。以下是详细的步骤&#xff1a; 首先&#xff0c;请确保您已经登录了聊天宝应用程序。如果您尚未登录&#xff0c;请使用您的账号登录。 在聊天宝主界面&#xff0c;找到您希望恢复聊天记录的对话框…

LeetCode - 数组 - 四数之和

题目地址 描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#x…

【机器学习与大模型】驱动下的应用图像识别与处理

摘要&#xff1a; 本文深入探讨了机器学习在图像识别与处理领域的应用&#xff0c;特别是在大模型的推动下所取得的巨大进展。详细阐述了图像识别与处理的基本原理、关键技术&#xff0c;以及机器学习算法和大模型如何提升其性能和准确性。通过实际案例分析了其在多个领域的广泛…

[WUSTCTF2020]level3

base64换表 但是这的表有一个引用 模拟执行 #DRKCTF{}aABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/ flag[ord(i) for i in a] for i in range(0,10):flag[i],flag[19-i]flag[19-i],flag[i] for i in flag:print(chr(i),end)新表 TSRQPONMLKJIHGFEDCBAU…

技术速递|无障碍应用程序之旅:键盘可访问性和 .NET MAUI

作者&#xff1a;Rachel Kang 排版&#xff1a;Alan Wang 首先让我们一起来看看您的应用程序是否支持键盘访问&#xff1a; 启动您的其中一个应用。如果您的设备尚未连接物理键盘&#xff0c;请连接物理键盘。像平常一样导航您的应用程序&#xff0c;并且仅使用键盘来执行此操…

DI-engine强化学习入门(三)DI-ZOO强化学习环境搭建与示例运行——Atari

Atari是一家知名的电子游戏公司&#xff0c;成立于1972年&#xff0c;是早期电子游戏产业的先驱之一。在强化学习领域&#xff0c;提到Atari通常指的是Atari 2600游戏的一系列环境&#xff0c;这些环境是用于开发和测试强化学习算法的标准平台。 Atari 2600 强化学习环境概述 …

ABC354学习笔记

高桥有一棵植物&#xff0c;这个植物在第 0 0 0 天时高度为 0 c m 0\,\mathrm{cm} 0cm&#xff0c;此后的第 i i i 天&#xff0c;他的植物会增高 2 i c m 2^i\,\mathrm{cm} 2icm。 高桥身高为 H c m H\,\mathrm{cm} Hcm。 高桥想知道在第几天&#xff0c;他的植物的高度会…