运维.售后
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
博客
Blog
ToB门户
了解全球最新的ToB事件
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
还不懂eureka原理实践,看完这篇你就懂了 ...
还不懂eureka原理实践,看完这篇你就懂了
冬雨财经
金牌会员
|
2024-9-10 03:52:35
|
显示全部楼层
|
阅读模式
楼主
主题
866
|
帖子
866
|
积分
2598
一、原理先容
Eureka是Netflix开发的一种服务发现和负载平衡框架,用于在分布式系统中管理和监控服务的注册和发现,本身是一个基于REST的服务,重要用于定位运行在AWS域中的中心层服务,以到达负载平衡和中心层服务故障转移的目的。
Spring Cloud Eureka 是对Netflix公司的Eureka的二次开发,包罗
两个组件:服务端 (Eureka Server) 与客户端(Eureka Client)
,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。服务端和客户端都是用java实现的。
-
1、 Eureka Server:
Eureka服务器是一个中央注册服务器,用于管理和维护服务的注册表。
每个服务实例在启动时,会向Eureka服务器注册自己的信息,包罗服务名、主机名、端口等。
Eureka服务器会维护一个心跳机制,定期向注册的服务实例发送心跳请求,以确保服务实例的可用性。
2、 服务注册和发现:
当服务实例启动时,会通过Eureka客户端向Eureka服务器注册自己的信息。
Eureka客户端会定期向Eureka服务器发送心跳请求,以表明服务实例的可用性。
其他服务在需要访问该服务时,可以通过Eureka客户端向Eureka服务器获取可用的服务实例列表,然后选择一个符合的实例进行访问。
3、 服务负载平衡:
Eureka客户端会缓存从Eureka服务器获取的可用服务实例列表,以提高访问的性能。
客户端可以利用负载平衡算法(如轮询、随机等)选择一个要访问的服务实例。
如果某个服务实例不可用(心跳超时、服务停止运行等),Eureka客户端会从缓存中移除该实例,并更新可用实例列表。
4. 高可用性:
Eureka支持集群部署,通过多个Eureka服务器实现高可用性。
Eureka服务器之间会进行相互注册和同步,以保持服务注册表的一致性。
客户端可以配置多个Eureka服务器地址,以便在主服务器不可用时自动切换到备用服务器。
5、Eureka Client
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、利用轮询(round-robin)负载算法的负载平衡器。
二、Eureka 代码剖析
如何实现Eureka注册中心,也就是Eureka Server;
新建一个父工程,删除src文件,增加pom文件,做一下简朴的配置,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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.storemanage.regestercenter</groupId>
<artifactId>springcloudexample</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>eurekamodule</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--eureka-server-->
<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-web</artifactId>
</dependency>
</dependencies>
</project>
复制代码
创建一个子工程项目eurekamodule(名称见名之意可以根据自己具体项目命名,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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.storemanage.regestercenter</groupId>
<artifactId>springcloudexample</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>eurekamodule</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--eureka-server-->
<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-web</artifactId>
</dependency>
</dependencies>
</project>
复制代码
项目结构如何
启动类代码
package org.storemanage.regestercenter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @CreateTime: 2024-08-22
* @Description: 注册中心
* @Version: 1.0
* @Author: hkf
*/
@EnableEurekaServer
@SpringBootApplication
public class GsEurekaServer {
public static void main(String[] args) {
SpringApplication.run(GsEurekaServer.class, args);
}
}
复制代码
在resource下面新建 配置文件application.yml
server:
port: 9999 #d端口号
eureka:
instance:
appname: eurekacenter # 实例名称
hostname: eureka9999.com #主机地址
client:
register-with-eureka: false # 表示自己是注册中心,不能自己注册自己
fetch-registry: false # 注册中心职责是维护服务,不需要去检索服务
server-url:
defaultZone: http://eureka9999.com:9999/eureka #其他服务注册到注册中心交互地址
复制代码
启动项目,通过浏览器访问注册中心,结果如图
访问地址:根据自己定义的端口号进行访问,localhost:9999
四、总结
Eureka通过集中管理和监控服务的注册和发现,提供了分布式系统中服务调用的可靠性和可用性。它的原理和实践可以资助开发职员轻松地实现服务发现和负载平衡功能,提高系统的可扩展性和可维护性。
Eureka是Netflix开源的一个服务发现框架,被广泛应用于微服务架构中。它通过建立一个注册中心来负责服务的注册与发现,使得微服务之间可以大概方便地相互调用。
如有不敷欢迎指出,等候与各位大佬共同进步
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
冬雨财经
金牌会员
这个人很懒什么都没写!
楼主热帖
信息与网络安全期末复习(完整版) ...
iOS全埋点解决方案-手势采集 ...
ts保姆级教程,别再说你不会ts了 ...
如何通过JDBC访问MySQL数据库?手把手 ...
Elasticsearch学习系列五(零停机索引 ...
Pod概述
Linux安装PHP8 新版笔记
《ABP Framework 极速开发》教程首发 ...
Log4j2 CVE-2021-44288 代码审计(底层 ...
有趣的特性:CHECK约束
标签云
存储
服务器
快速回复
返回顶部
返回列表