Spring Cloud系列(二):Eureka Server应用

news2024/11/28 2:46:55

系列文章

Spring Cloud系列(一):Spirng Cloud变化

Spring Cloud系列(二):Eureka Server应用

 

 

目录

前言

注册中心对比

        Nacos

        Zookeeper

        Consul

搭建服务

        准备

        搭建

                搭建父模块

                搭建Server模块

启动服务

测试

其他


前言

前面针对新版本的变化有了了解,接下来,对 Spring Cloud 规范下的各大组件做一个介绍和应用用,包括原理,首先就是微服务的核心——注册中心 Eureka。

Eureka 是 Spring Cloud 提供的默认的服务注册中心,其提供了服务注册与发现功能。

Eureka 包含 Eureka-Server 和 Eureka-Client 两部分, Eureka-Server 是服务注册中心,用于管理注册的所有服务;Eureka-Client 是客户端,用于服务提供者提供服务和服务消费者调用服务。

其工作流程大体如下:

注册中心对比

除了 Spring Cloud 默认的注册中心 Eureka 外,当今主流的注册中心还有 Nacos、Zookeeper、Consul 等。

Nacos

Nacos 是一个阿里开源的动态服务发现、配置管理和服务管理平台,其不但提供了注册中心的功能,还提供了配置中心、简单的权限管理等功能,功能易用且强大。

Zookeeper

Zookeeper 是一个分布式服务框架,其采用存储+通知的方式,解决分布式中的各种问题,其功能包括:发布/订阅、分布式队列、集群管理、分布式独占锁/读写锁、集群Leader选举、分布式ID生成等等。这些功能主要是利用其 Znode 节点的特性和其节点监听的功能,其采用 ZAB 协议保持数据的一致性。

Consul

Consul 是由 HashiCorp 基于 Go 语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件, 采用 Raft 算法保证服务的一致性,且支持健康检查。

组件名语言CAP主要功能
EurekaJavaAP注册中心
NacosJavaAP/CP注册中心、配置中心
ZookeeperJavaCP

注册中心、配置中心、分布式队列、分布式锁、

分布式ID、集群管理等

ConsulGoCP注册中心、配置中心

搭建服务

准备

名称版本
Spring-Boot2.7.8
Spring Cloud2021.0.9
Spring Cloud Alibaba2021.0.5.0
JDK1.8

该系列的所有内容相关环境,都已以上为主。

搭建

当前项目分为两个模块,SpringCloudEurekaDemo2 和 SpringCloudServer

SpringCloudEurekaDemo2 是父模块,主要用于管理子模块、管理依赖等等。

SpringCloudServer 就是注册中心所在模块,用于微服务中所有的服务注册和管理。

搭建父模块
  • pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <modules>
        <module>SpringCloudServer</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example.eureka</groupId>
    <artifactId>SpringCloudEurekaDemo2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringCloudEurekaDemo2</name>
    <description>SpringCloudEurekaDemo2</description>
    <packaging>pom</packaging>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.9</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
搭建Server模块
  • pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudEurekaDemo2</artifactId>
        <groupId>com.example.eureka</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>SpringCloudServer</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

</project>
  • 启动类 
@EnableEurekaServer
@SpringBootApplication
public class ServerBootStrap {

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

 说明: @EnableEurekaServer 表示当前服务是一个 Eureka 注册中心

  • application.yml
spring:
  application:
    name: cloud-server

---
server:
  port: 8081
spring:
  config:
    activate:
      on-profile: serverA
eureka:
  server:
    #注册中心多久检查一次失效的实例
    eviction-interval-timer-in-ms: 60
    #自我保护
    enable-self-preservation: true
  instance:
    hostname: SpringCloudServerA
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}:@project.version@
  client:
    service-url:
      defaultZone: http://SpringCloudServerB:8082/eureka
    register-with-eureka: true
    fetch-registry: true

---

server:
  port: 8082
spring:
  config:
    activate:
      on-profile: serverB
eureka:
  server:
    #注册中心多久检查一次失效的实例
    eviction-interval-timer-in-ms: 60
    #自我保护
    enable-self-preservation: true
  instance:
    hostname: SpringCloudServerB
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}:@project.version@
  client:
    service-url:
      defaultZone: http://SpringCloudServerA:8081/eureka
    register-with-eureka: true
    fetch-registry: true

说明:1.spring.config.activate.on-profile:表示当前环境名,这里采用不同的端口构建伪集群

           2.eureka.server.eviction-interval-timer-in-ms:表示当前注册中心间隔多久检查实例状态,单位秒,默认 60秒

           3.eureka.server.enable-self-preservation:表示是否开启自我保护(避免网络故障导致服务不可用),默认 true

           4.eureka.instance.prefer-ip-address:表示猜测显示主机名时是IP优先,默认 false

           5.eureka.instance.instance-id:表示注册在注册中心Eureka上的唯一实例ID,默认 主机名:应用名:端口

           6.eureka.client.service-url.defaultZone:默认注册地址,默认值 http://localhost:8761/eureka/

           7.eureka.client.register-with-eureka:表示是否注册自己为服务,默认 true

           8.eureka.client.fetch-registry:表示是否从注册中心Eureka拉取服务,默认 true

注意:1.这里 SpringCloudServerA 和 SpringCloudServerB 能生效的前提是已在C:\Windows\System32\drivers\etc\hosts 中配置映射

127.0.0.1 SpringCloudServerA
127.0.0.1 SpringCloudServerB

启动服务

以上配置完后,继续。

1. 分别在 IDEA 中增加配置文件参数 serverA 和 serverB(不是IDEA的自己加vm参数)启动服务

2. 注册中心有多个节点的,节点没全部启动完,报错是正常的(相互注册情况下),全部启动后再观察日志

测试

服务启动好了,Eureka 自带 DashBoard 可查看相应的信息。

1. 浏览器访问 http://localhost:8081/ 或者 http://localhost:8082/

其他

1. Eureka 全部节点都是平等的,不存在主从区分

2. Eureka 自我保护机制是非常有必要的,如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中间出现了网络故障,Eureka Server自动进入我保护机制。进入自我保护的注册中心不会主动剔除服务,保证当前注册中心仍然可用,并且能进行正常的注册和调用,但不会主动同步服务列表直到网络正常。

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

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

相关文章

【SCI绘图】【曲线图系列1 python】绘制扫描点平滑曲线图

SCI&#xff0c;CCF&#xff0c;EI及核心期刊绘图宝典&#xff0c;爆款持续更新&#xff0c;助力科研&#xff01; 本期分享&#xff1a; 【SCI绘图】【曲线图1 python】绘制扫描点平滑曲线图 1.环境准备 python 3 import numpy as np import pandas as pd import proplot …

镗床工作台开槽的作用

镗床工作台开槽的作用主要有以下几点&#xff1a; 改善工作台的刚度和稳定性&#xff1a;开槽可以增加工作台的刚度&#xff0c;使其能够承受更大的切削力和振动力&#xff0c;提高工作台的稳定性。 方便工件夹紧和定位&#xff1a;开槽可用于夹紧和定位工件&#xff0c;使其能…

SAP 配置不让采购发票重复<转载>

原文链接&#xff1a;https://www.doc88.com/p-74459799460659.html 此配置方案存在一些弊端&#xff0c; 1.比如如果录入错误发票号就检验不到重复&#xff0c;还有录入字符限制最多16个字符等等。 2.设置后对于发票预制和正式发票都同时生效的&#xff0c;而有…

WEB3浪潮下的全新体验:精灵派对链游引领边玩边赚的创新之旅

在当前的数字经济浪潮中&#xff0c;区块链技术以其独特的去中心化特性&#xff0c;正在逐渐改变我们的生活和工作方式。其中&#xff0c;区块链游戏&#xff08;链游&#xff09;作为新兴的领域&#xff0c;正以其独特的优势吸引着全球玩家的目光。在这样一个背景下&#xff0…

数据结构之树的性质总结

节点的度&#xff1a;该节点拥有的孩子个数 叶子节点&#xff1a;度为0的节点 层数&#xff1a;根节点为第一层&#xff0c;根的子节点为第二层&#xff0c;以此类推 所有树的性质&#xff1a;所有节点的总度数等于节点数减一 完全m叉树性质 完全m 叉树&#xff0c;节点的…

计算机专业,不擅长打代码,考研该怎么选择?

考研其实和你的代码能力关系不大 所以在选学校以前可以看看有哪些学校复试是要求上机撸代码的&#xff0c;可能会要求比较严 初试真的不用担心代码问题&#xff0c;我也是基本零编程能力就开始备考考研的... 本人双非科班出身备考408成功上岸&#xff0c;在这里也想给想考40…

Spark编程基础

一、RDD入门 1.RDD是什么&#xff1f; RDD是一个容错的、只读的、可进行并行操作的数据结构&#xff0c;是一个分布在集群各个节点中的存放元素的集合&#xff0c;即弹性分布式数据集。 2.RDD的三种创建方式 第一种是将程序中已存在的集合&#xff08;如集合、列表、数组&a…

若依二次开发总结

基于若依进行二次开发总结 后端启动 1.idea中打开项目 maven加载依赖 2.配置数据库&#xff0c;运行sql文件 3.配置yml文件 4.用命令redis-server启动redis 5.运行启动类&#xff0c;启动后端 前端启动 1.在vscode中打开文件夹ruoyi-ui 2.安装依赖 npm install3.启动前端 …

通往 AGI 的道路上,OpenAI 逐渐构建了全模态的工具集

几天前&#xff0c;OpenAI 公司官宣将发布一个名为“Voice Engine”的小规模模型&#xff0c;引起巨大的声浪。 该模型支持仅使用文本输入和单个 15 秒音频样本来生成与原始说话者非常相似的自然语音。可应用于“语音转录”、“语音克隆”、“语音翻译”等场景。 笔者感叹 AI …

linux查看硬盘空间使用情况

df &#xff08;1&#xff09;查看磁盘空间的占用情况 -h是给大小带上单位 df -h 总空间不一定等于已用未用&#xff0c;系统可能留出来一点空间另做他用 &#xff08;2&#xff09;查看INode的使用情况 df -idu du命令比df命令复杂一点&#xff0c;是查看文件和目录占用的…

VUE3的有关知识

学习vue3的原因 在vue2当中的组件的实例,都是data一块,computed一块,当我们去找某一变量相关的则十分麻烦,vue3是组合式API,vue2是选项式, vue3的优点: 1)组合式更易维护 2)更快的速度 3)更小的体积 4)更好的响应式proxy 使用vue3相关脚手架创建项目 步骤: 1)node -v node版…

文献学习-32-新生儿皮质表面重建的条件时间注意网络

Conditional Temporal Attention Networks for Neonatal Cortical Surface Reconstruction Authors: Qiang Ma, Liu Li, Vanessa Kyriakopoulou, Joseph V. Hajnal, Emma C. Robinson, Bernhard Kainz, and Daniel Rueckert Source: MICCAI 2023 Abstract 皮层表面重建在模拟…

深度学习的模型有几类,能干嘛用?

1、基础模型 &#xff08;1&#xff09;卷积神经网络 **卷积&#xff1a;**卷积的本质是通过矩阵运算9的方式将输入数据进行空间上的滤波&#xff0c;有效地提取数据中的局 部特征&#xff0c;从而实现特征数据更高程度的抽象表示。 **池化&#xff1a;**可以理解成“压缩”…

RabbitMQ的自动应答和手动应答,解决重试死循环

RabbitMQ的自动应答和手动应答&#xff0c;解决重试死循环 1.应答模式 RabbitMQ 中的消息应答模式主要包括两种&#xff1a;自动应答&#xff08;Automatic Acknowledgement&#xff09;和手动应答&#xff08;Manual Acknowledgement&#xff09;。 1、自动应答&#xff1a;…

20240309web前端_第三周作业_教务系统页面

作业&#xff1a;教务系统页面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

机器学习 —— 使用机器学习进行情感分析 详细介绍版

机器学习 —— 使用机器学习进行情感分析 详细介绍版 机器学习 —— 使用机器学习进行情感分析 演示版 目录 一、 绪论二、 数据处理1. 构建CSV文档2. 构建模型前的思考2.1. 问题2.2. 解决方法 3. 读取数据4. 用正则表达式来进行对特定符号的剔除5. 使用口袋模型进行文本处理和…

科研学习|研究方法——定性数据的定量编码方法

一、关于数据的分类 数据可以根据不同的属性和特征进行分类。以下是数据常见的分类方式&#xff1a; 1. 数值型数据&#xff1a;表示为具体的数值&#xff0c;可以进行数学运算和统计分析。例如年龄、身高、体重等。2. 分类型数据&#xff1a;表示为不同的类别或标签&#xff0…

XUbuntu22.04之Typora添加水印并输出pdf文件(二百二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

el-drawer二次封装进行可拖拽

1.想要的效果 鼠标放到上面出现箭头显示可拖拽得图标 2.代码实现 2.1封装成自定义指令 // drawerDragDirective.js // 定义指令 const drawerDragDirective {// 指令绑定时的处理函数bind(el, ) {const minWidth 300;const dragDom el.querySelector(.el-drawer);// 创…

leetcode106题

思路 根据中序遍历和后序遍历的特性可知&#xff0c;后序遍历的最后一个元素为根元素。然后找到中序遍历中对应的序号。将中序遍历的划分为两部分&#xff0c;左边为左子树&#xff0c;右边为右子树。 方法 由思路可知&#xff0c;可以使用递归。递归函数的入口为划分的区间…