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

系列文章

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: trueinstance:hostname: SpringCloudServerAprefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port}:@project.version@client:service-url:defaultZone: http://SpringCloudServerB:8082/eurekaregister-with-eureka: truefetch-registry: true---server:port: 8082
spring:config:activate:on-profile: serverB
eureka:server:#注册中心多久检查一次失效的实例eviction-interval-timer-in-ms: 60#自我保护enable-self-preservation: trueinstance:hostname: SpringCloudServerBprefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port}:@project.version@client:service-url:defaultZone: http://SpringCloudServerA:8081/eurekaregister-with-eureka: truefetch-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.hqwc.cn/news/614956.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue】v-model.lazy等(非实时渲染)

v-model&#xff1a;实时渲染v-model.lazy&#xff1a;失去焦点/按回车后&#xff0c;才渲染v-model.number&#xff1a;值转换为数字v-model.trim&#xff1a;去除首尾空格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

ansible的常见用法

目录 ##编辑hosts文件 ##copy模块##复制过去 ##fetch模块##拉取 ##shell模块 ##好用 ##command模块## ##file模块### ##cron模块### ##crontab 计划任务 ##下载好时间插件 ##script模块 ##yum模块## ##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo ##ser…

多模态AnyGPT——整合图像、语音和文本多模态大规模语言模型的出现

概述 大规模语言模型在理解和生成人类语言方面具有非凡的能力&#xff0c;但迄今为止&#xff0c;它们的能力主要局限于文本处理。然而&#xff0c;现实世界是一个多模式的环境&#xff0c;信息通过视觉、听觉和触觉等多种感官进行交换。融入这种多样性是开发下一代系统的主要…

刷题之动态规划-两个数组

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的两个数组类型相关的题目 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是动态规划的核心步骤&#xff0…

php其他反序列化知识学习

简单总结一下最近学习的&#xff0c;php其他的一些反序列化知识 phar soap session 其他 __wakeup绕过gc绕过异常非公有属性&#xff0c;类名大小写不敏感正则匹配&#xff0c;十六进制绕过关键字检测原生类的利用 phar 基础知识 在 之前学习的反序列化利用中&#xff0…

go websocket

WebSocket 是一种网络协议&#xff0c;建立在 HTTP 协议之上&#xff0c;允许双向通信。WebSocket 协议允许服务器发送数据到客户端&#xff0c;同时也可以让客户端向服务器发送数据。WebSocket 使用 HTTP 协议的升级请求和响应来建立连接。WebSocket 的主要优点在于它可以通过…

【JAVA基础篇教学】第十篇:Java中Map详解说明

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十篇&#xff1a;Java中Map详解说明。 在 Java 编程中&#xff0c;Map 接口代表了一种键值对的集合&#xff0c;每个键对应一个值。Map 接口提供了一系列操作方法&#xff0c;可以方便地对键值对进行增删改查等操作。本…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念&#xff0c;特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习&#xff0c;模型可以更好地处理未知的情况和新任务&#xff0c;减少对大量标注数据的依赖&#xff0c;提高模型的…

带函数的多代理 AutoGen - 使用代码示例分步

目录 一、说明二、AutoGen 的本质&#xff1a;可对话和可定制的代理2.1 简化任务自动化和人机交互2.2 赋能动态对话 三、分步代码示例3.1 第 1 步&#xff1a;安装必要的库3.2 第 2 步&#xff1a;设置 API 终端节点3.3 第 3 步&#xff1a;导入库并设置配置3.4 第 4 步&#…

JavaScript函数式编程

函数式编程 课程介绍 为什么要学习函数编程以及什么是函数式编程函数式编程的特性(纯函数、柯里化、函数组合等)函数式编程的应用场景函数式编程库Lodash 为什么要学习函数式编程 函数式编程是非常古老的一个概念&#xff0c;早于第一台计算机的诞生&#xff0c; 函数式编程…

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅…

如何做好软件平台的全生命周期管理?

一、为何需生命周期管理 做好软件平台的全生命周期管理至关重要&#xff0c;主要原因如下&#xff1a; 确保软件质量&#xff1a; 全生命周期管理涵盖了从需求分析、设计、开发、测试、部署、运行维护到废弃的全过程&#xff0c;通过有效的管理可以确保每个阶段的质量控制&…