冬雨财经 发表于 2024-9-10 03:52:35

还不懂eureka原理实践,看完这篇你就懂了

一、原理先容


[*]Eureka是Netflix开发的一种服务发现和负载平衡框架,用于在分布式系统中管理和监控服务的注册和发现,本身是一个基于REST的服务,重要用于定位运行在AWS域中的中心层服务,以到达负载平衡和中心层服务故障转移的目的。
[*]Spring Cloud Eureka 是对Netflix公司的Eureka的二次开发,包罗两个组件:服务端 (Eureka Server) 与客户端(Eureka Client),服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。服务端和客户端都是用java实现的。
-https://i-blog.csdnimg.cn/direct/bb5ec399d260458186975cb847ba96ee.png
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)负载算法的负载平衡器。
https://i-blog.csdnimg.cn/direct/3fe9ede3dd97460a86b562400141188a.png
二、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>

[*]项目结构如何
https://i-blog.csdnimg.cn/direct/b24e43fabd644ff690f702c2b1673eb2.png
[*]启动类代码
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
https://i-blog.csdnimg.cn/direct/15a823b594624282b44251ac9647b33b.png
四、总结


[*] Eureka通过集中管理和监控服务的注册和发现,提供了分布式系统中服务调用的可靠性和可用性。它的原理和实践可以资助开发职员轻松地实现服务发现和负载平衡功能,提高系统的可扩展性和可维护性。
[*] Eureka是Netflix开源的一个服务发现框架,被广泛应用于微服务架构中。它通过建立一个注册中心来负责服务的注册与发现,使得微服务之间可以大概方便地相互调用。
如有不敷欢迎指出,等候与各位大佬共同进步
https://i-blog.csdnimg.cn/direct/14b93a6293ce4e9a9da2fe07361cf489.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 还不懂eureka原理实践,看完这篇你就懂了