Eureka-第一篇

这篇具有很好参考价值的文章主要介绍了Eureka-第一篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Eureka的概述

Eureka的基本概念和作用

Eureka是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Eureka是Netflix开发的服务发现框架,主要用于解决在云计算环境中动态位置服务和快速弹性变化的问题。在微服务架构中,Eureka可以作为服务注册与发现组件,使服务之间能够相互通信。

Eureka的作用主要包括以下几点:

1、服务注册与发现: Eureka作为服务注册中心,允许服务实例注册自己的信息,并能够被其他服务查询和发现。这使得服务之间能够动态地相互发现和通信。

2、负载均衡: Eureka提供了负载均衡机制,能够根据服务实例的状态和数量,动态地将请求分配给可用的服务实例。这有助于提高服务的可用性和性能。

3、故障转移: 当某个服务实例出现故障时,Eureka能够自动将其从服务列表中移除,并将请求路由到其他可用的服务实例。这有助于提高服务的可靠性和稳定性。

4、监控和日志管理: Eureka提供了丰富的监控和日志管理功能,能够帮助开发人员和运维人员实时监控服务的状态和性能,以及进行故障排查和日志分析。

Eureka的主要特点

1、易于使用: Eureka提供了简洁的API和友好的用户界面,使得服务的注册、发现和配置变得简单。

2、高可用性: Eureka支持服务注册中心的集群部署,通过相互注册来保证注册中心的高可用性。

3、动态扩展:Eureka支持服务的动态注册和注销,适应服务实例的动态变化。

4、负载均衡: Eureka集成了Ribbon负载均衡器,实现了对多个服务提供者的请求分配,提高了系统的性能和稳定性。

5、健康检查:Eureka注册中心会定期对服务提供者进行健康检查,如果一个服务提供者出现故障,Eureka将其标记为不可用。服务消费者在查询服务列表时可以过滤掉不可用的服务提供者,确保只选择健康的服务。

6、故障转移: 在Eureka平台中,如果某台服务器宕机,客户端请求会自动切换到新的Eureka节点。当宕机的服务器重新恢复后,Eureka会再次将其纳入到服务器集群管理中。

7、客户端缓存功能:Eureka还有客户端缓存功能,即使Eureka集群中所有节点都失效,或者发生网络分割故障导致客户端不能访问任何一台Eureka服务器,Eureka服务的消费者仍然可以通过Eureka客户端缓存来获取现有的服务注册信息。

总的来说,Eureka主要特点体现在服务的动态注册与发现、负载均衡、健康检查、故障转移和客户端缓存等方面,这使得Eureka成为构建微服务架构的可靠基础设施。

Eureka在微服务架构中的地位和作用

Eureka在微服务架构中扮演着核心的角色,负责服务的注册与发现。其主要作用和地位如下:

1、中心枢纽: Eureka作为中心服务注册与发现组件,使得其他微服务能够相互发现和通信。其他组件和服务都依赖Eureka来获取其他服务的地址信息,然后根据项目需求实现自己的业务。

2、服务治理: Eureka负责管理服务的注册与发现,使得服务可以动态地加入或离开。这有助于实现服务的动态管理和快速弹性变化,提高了服务的可用性和可靠性。

3、负载均衡和故障转移: Eureka集成了负载均衡和故障转移机制。它可以根据服务实例的状态和数量,动态地将请求分配给可用的服务实例,并在某个实例出现故障时自动进行故障转移。

二、Eureka的工作原理

Eureka的注册与发现机制

Eureka的注册与发现机制主要基于以下步骤:

1、服务注册: 当一个服务启动时,Eureka客户端会向Eureka Server发送注册请求,将自己的信息注册到Eureka Server上。这些信息包括服务实例的IP地址、端口号、应用名称、实例ID等信息。Eureka Server接收到注册信息后,会将该服务实例的信息存储在内存中,并定期向其他Eureka Server节点发送心跳,保持信息的同步。

2、服务发现: 当一个服务消费者需要调用其他服务时,它会向Eureka Server发送一个服务发现请求。Eureka Server会返回已注册的服务实例列表,消费者可以根据返回的列表来获取目标服务的地址信息。为了实现负载均衡,Eureka Server提供了多种负载均衡策略,如轮询、随机等。

3、服务更新与注销: 当服务实例的状态发生变化时,Eureka客户端会向Eureka Server发送更新请求,更新服务实例的状态信息。如果服务实例需要下线或注销,Eureka客户端会向Eureka Server发送注销请求,将该服务实例从注册表中删除。

4、健康检查: Eureka Server会定期对服务实例进行健康检查,检查其是否正常运行。如果某个服务实例出现故障或异常,Eureka Server会自动将其从服务列表中移除,保证服务的可用性。

5、客户端缓存: 为了提高性能和可用性,Eureka客户端会缓存服务实例的信息。即使在Eureka Server节点宕机或网络分割的情况下,服务消费者仍然可以通过缓存来获取现有的服务注册信息。

通过以上机制,Eureka实现了服务的动态注册与发现,使得微服务架构中的服务之间能够动态地相互发现和通信,提高了服务的可用性、可靠性和性能。

Eureka的注册与发现机制主要通过Eureka Server和Eureka Client来实现。以下是一个简单的代码实现例子:

首先,我们需要创建一个Eureka Server:

import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.cloud.netflix.eureka.server.EnableEurekaserver;  

 
@EnableEurekaserver  
@SpringBootApplication  
public class EurekaServerApplication {  

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

  }  

}

然后,我们需要创建一个Eureka Client,用于注册和发现服务:

import org.springframework.boot.SpringApplication;  

import org.springframework.boot.autoconfigure.SpringBootApplication;  

import org.springframework.cloud.netflix.eureka.EnableEurekas;  

import org.springframework.cloud.netflix.eureka.server.EnableEurekaserver;  

@EnableEurekas  
@SpringBootApplication  
public class EurekaClientApplication {  

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

  }  

}

在application.yml或application.properties文件中,你需要配置Eureka Server的地址:

yml

eureka:  

 instance:  

  hostname: localhost  

 client:  

  registerWithEureka: true  

  fetchRegistry: true  

  serviceUrl: http://localhost:60001/eureka/

 
Eureka的服务实例状态管理

Eureka的服务实例状态管理主要包括以下几个方面:

1、正常状态: 服务实例正常运行,能够正常处理请求。在Eureka中,服务实例的状态由Eureka Server进行监控和记录。当服务实例处于正常状态时,Eureka Server会定期向该实例发送心跳包,以保持其注册信息的有效性。

2、下线状态: 服务实例由于某种原因无法正常提供服务,需要从服务列表中移除。当服务实例处于下线状态时,Eureka Server会将其从服务列表中剔除,以保证服务的高可用性。服务实例的下线状态可以通过Eureka Server的管理界面进行手动设置。

3、离线状态: 与下线状态类似,服务实例处于离线状态时也无法正常提供服务。离线状态通常用于在服务实例短暂不可用时,暂时将其从服务列表中移除。与下线状态不同的是,离线状态的实例在恢复正常后,可以自动重新注册到Eureka Server。

4、禁用状态: 服务实例被禁用,无法接受任何请求。禁用状态通常用于在维护或升级期间暂时停止服务。在禁用状态下,Eureka Server会保留服务实例的注册信息,但不会向其发送心跳包。

通过以上状态管理机制,Eureka能够有效地监控和管理服务实例的状态,保证服务的可用性和可靠性。同时,Eureka还提供了丰富的API和监控界面,方便管理员对服务实例的状态进行管理和监控。

Eureka的安全和认证机制

Eureka的安全和认证机制主要是通过设置用户名和密码来实现的。具体步骤如下:

在Eureka Server中导入Security依赖,如Spring Security依赖。

在Eureka Server的配置文件中添加安全认证相关的配置,包括用户名和密码。例如,可以在application.yml或application.properties文件中添加如下配置:

spring:  
 security:  
  user:  
   name: ldzg  
   password: 123456

在Eureka Client的配置文件中设置与Eureka Server相同的用户名和密码,以进行安全认证。例如,在application.yml或application.properties文件中添加如下配置:

yml

eureka:  
 client:  
  username: ldzg  
  password: 123456

重启Eureka Server和Eureka Client,启动后Eureka Client会自动使用设置的用户名和密码向Eureka Server进行安全认证。如果认证失败,Eureka Client将无法注册到Eureka Server。

完成安全认证后,Eureka Client就可以正常地注册到Eureka Server,并与其他服务进行交互。

通过以上步骤,可以确保只有通过安全认证的服务才能注册到Eureka Server,提高了服务的可用性和安全性。

三、Eureka的实操

单机版无安全检验方式

架构图

Eureka-第一篇,spring cloud,eureka,云原生,spring cloud,微服务,服务发现

1、Eureka-server

代码

package com.ldzg;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;

import java.net.InetAddress;
import java.net.UnknownHostException;

@Slf4j
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) throws UnknownHostException {
        ConfigurableApplicationContext application = SpringApplication.run(EurekaServerApplication.class, args);
        Environment env = application.getEnvironment();
        String ip = InetAddress.getLocalHost().getHostAddress();
        String port = env.getProperty("server.port");
        String path ="";// env.getProperty("server.servlet.context-path");
        log.info("\n----------------------------------------------------------\n\t" +
                "Application Eureka is running! Access URLs:\n\t" +
                "Local: \t\thttp://localhost:" + port + path + "/\n\t" +
                "External: \thttp://" + ip + ":" + port + path + "/\n\t" +
                "swagger-ui: \thttp://" + ip + ":" + port + path + "/swagger-ui.html\n\t" +
                "Doc: \t\thttp://" + ip + ":" + port + path + "/doc.html\n" +
                "----------------------------------------------------------");
    }

}

pom.xml文件

<?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>springcloud-learning</artifactId>
        <groupId>com.ldzg</groupId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-server1</artifactId>
    <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-security</artifactId>-->
<!--        </dependency>-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml配置文件说明

server:
  port: 60001 #指定运行端口
spring:
  application:
    name: eureka-server #指定服务名称
eureka:
  instance:
    hostname: localhost #指定主机地址
  client:
    fetch-registry: false #指定是否要从注册中心获取服务(注册中心不需要开启)
    register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启)
    service-url: #eureka的地址信息
      defaultZone: http://localhost:60001/eureka
  server:
    enable-self-preservation: false #关闭保护模式

运行结果:
Eureka-第一篇,spring cloud,eureka,云原生,spring cloud,微服务,服务发现

2、springcloud-consumer

java代码

package com.ldzg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {

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

}

pom.xml文件

<?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>springcloud-learning</artifactId>
        <groupId>com.ldzg</groupId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>eureka-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-client</name>
    <description> Spring cloud</description>

<!--    <dependencies>-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-security</artifactId>-->
<!--        </dependency>-->
<!--    </dependencies>-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml配置文件说明

server:
  port: 60002 #运行端口号
spring:
  application:
    name: eureka-client #服务名称
eureka:
  client:
    register-with-eureka: true #注册到Eureka的注册中心
    fetch-registry: true #获取注册实例列表
    service-url:
      defaultZone: http://localhost:60001/eureka/ #配置注册中心地址

3、springcloud-provider

java代码

  • Controller
package com.ldzg.controller;

import com.ldzg.ov.CommonResult;
import com.ldzg.ov.User;
import com.ldzg.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * Created by ldzg on 2024/1/18.
 */
@RestController
@RequestMapping("/ldzguser")
public class UserFeignController {
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public CommonResult getUser(@PathVariable Long id) {
        return userService.ldzg_getUser(id);
    }

    @GetMapping("/getByUsername")
    public CommonResult getByUsername(@RequestParam String username) {
        return userService.ldzg_getByUsername(username);
    }

    @PostMapping("/create")
    public CommonResult create(@RequestBody User user) {
        return userService.ldzg_create(user);
    }

    @PostMapping("/update")
    public CommonResult update(@RequestBody User user) {
        return userService.ldzg_update(user);
    }

}

  • Service
package com.ldzg.service.impl;


import com.ldzg.ov.CommonResult;
import com.ldzg.ov.User;
import com.ldzg.service.UserService;
import org.springframework.stereotype.Component;

/**
 * Created by ldzg on 2024/1/18.
 */
@Component
public class UserFallbackService implements UserService {
    @Override
    public CommonResult ldzg_create(User user) {
        User defaultUser = new User(-1L, "ldzg", "123456");
        return new CommonResult<>(defaultUser);
    }

    @Override
    public CommonResult<User> ldzg_getUser(Long id) {
        User defaultUser = new User(-1L, "ldzg", "123456");
        return new CommonResult<>(defaultUser);
    }

    @Override
    public CommonResult<User> ldzg_getByUsername(String username) {
        User defaultUser = new User(-1L, "ldzg", "123456");
        return new CommonResult<>(defaultUser);
    }

    @Override
    public CommonResult ldzg_update(User user) {
        return new CommonResult("调用失败",500);
    }

}

pom.xml文件

<?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>springcloud-learning</artifactId>
        <groupId>com.ldzg</groupId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-provider</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-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.yml配置文件说明

server:
  port: 60005
spring:
  application:
    name: consumer
eureka:
  client:
    register-with-eureka: true #注册到Eureka的注册中心
    fetch-registry: true #获取注册实例列表
    service-url:
      defaultZone: http://localhost:60001/eureka/ #配置注册中心地址
feign:
  hystrix:
    enabled: true #开启Hystrix
logging:
  level:
    com.macro.cloud.service.UserService: debug

运行结果
Eureka-第一篇,spring cloud,eureka,云原生,spring cloud,微服务,服务发现

第一篇先讲到这里,下一期讲第二篇关于Eureka的高可用与安全连接模式文章来源地址https://www.toymoban.com/news/detail-820886.html

到了这里,关于Eureka-第一篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【spring cloud学习】2、Eureka服务注册与发现

    一套微服务架构的系统由很多单一职责的服务单元组成,而每个服务单元又有众多运行实例。由于各服务单元颗粒度较小、数量众多,相互之间呈现网状依赖关系,因此需要服务注册中心来统一管理微服务实例,维护各服务实例的健康状态。 从宏观角度,微服务架构下的系统

    2024年02月10日
    浏览(69)
  • 深入了解Spring Cloud的服务注册与发现组件Eureka

    摘要:Spring Cloud是一个基于Spring框架的开发工具包,可以帮助开发人员构建基于微服务架构的分布式系统。其中的核心组件之一是Eureka,它提供了一套强大的服务注册与发现功能。本文将深入介绍Spring Cloud中的Eureka组件,包括其背景、特性、工作原理以及与其他Spring Cloud组件

    2024年02月13日
    浏览(61)
  • Spring Cloud(Finchley版本)系列教程(一) 服务注册与发现(eureka)

    Spring Cloud(Finchley版本)系列教程(一) 服务注册与发现(eureka) 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 如有错误恳请大家批评指正,与大家共同学习、一起成长,万分感谢。 一、构建环境 Spring Cloud 的构建工具可以使用 Maven 或 Gradle ,但 Ma

    2024年02月09日
    浏览(59)
  • 【Spring Cloud】深入理解 Eureka 注册中心的原理、服务的注册与发现

    在微服务架构中,服务的注册与发现是至关重要的一环。为了实现这一目标,Eureka 注册中心应运而生。在本篇文章中,我们将深入理解 Eureka 注册中心的原理,以及探讨服务的注册与发现机制。 在微服务的协作中,服务之间的远程调用是常见的需求。然而,使用传统的 Rest

    2024年02月08日
    浏览(57)
  • Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)

    这篇文章先讲述一下Eureka的应用场景、代码实现案例,多个服务模块注册到Euraka中,服务之间的调用实现我会再下一篇文章中进行讲解! Eureka主要是做: 注册发现中心 服务注册与发现的组件 说到Eureka不得不提到了CAP,那么什么是CAP原则呢,下面一起来看下! CAP 原则: 又称

    2024年02月15日
    浏览(83)
  • 云原生微服务 第五章 Spring Cloud Netflix Eureka集成负载均衡组件Ribbon

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具,其主要功能是提供客户端的负载均衡算法和服务

    2024年02月08日
    浏览(50)
  • Spring Cloud之一:注册与发现-Eureka工程的创建

      系列目录(持续更新。。。) Spring Cloud:什么是微服务 Spring Cloud之一:注册与发现-Eureka工程的创建 Spring Cloud之二:服务提供者注册到Eureka Server Spring Cloud之三:Eureka Server添加认证 Spring Cloud 之四:使用Feign实现微服务间的交互 Spring Cloud 之五:Feign使用Hystrix 目录 环境 E

    2023年04月09日
    浏览(50)
  • 2-Spring cloud之Eureka快速剔除失效服务 以及 Eureka原理

    添加如下配置: 每个服务的yml配置如下: 如下: 更多可以参考下面的文章,说的不错 Eureka服务端挂了,为什么微服务还能调通?(原理分析).

    2024年02月13日
    浏览(80)
  • Spring Cloud Netflix微服务组件-Eureka

    目录 CAP理论 注册中心对比 为什么注册中心更适合用AP? 分布式系统AP和CP如何取舍? Eureka核心功能点 Euraka server启动的主线流程 总体流程图 @EnableEurekaServer 流程图 EurekaServerAutoConfiguration EurekaServerInitializerConfiguration Euraka client启动的主线流程 总体流程图 EurekaClientAutoConfigurat

    2024年02月01日
    浏览(248)
  • 2-Spring cloud之Eureka快速剔除失效服务

    添加如下配置: 每个服务的yml配置如下: 如下: 更多可以参考下面的文章,说的不错 Eureka服务端挂了,为什么微服务还能调通?(原理分析).

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包