0


Eureka介绍与使用

Eureka 是一个基于 REST 的服务,主要用于定位服务,以实现云端中间层服务发现和故障转移。它由 Netflix 开发并开源,是 Spring Cloud 生态系统中的重要组件之一。Eureka 主要用于微服务架构中,帮助服务客户端注册和发现服务,从而实现服务的自动管理。

Eureka 的核心概念

  1. 服务注册(Service Registration):- 服务提供者在启动时,会将自己的服务信息(如服务名、IP地址、端口等)注册到 Eureka 服务器。
  2. 服务发现(Service Discovery):- 服务消费者从 Eureka 服务器获取服务提供者的信息,并使用这些信息进行远程调用。
  3. 心跳机制(Heartbeat):- 服务提供者会定期向 Eureka 服务器发送心跳,以证明自己仍然存活。如果 Eureka 服务器在一定时间内没有收到某个服务提供者的心跳,它会将其从注册表中移除。
  4. 客户端缓存(Client-side Caching):- Eureka 客户端会缓存服务注册表的信息,这样即使 Eureka 服务器不可用,客户端仍然可以进行服务发现。

Eureka 的架构

Eureka 的架构主要包括两个组件:Eureka 服务器(Eureka Server)和 Eureka 客户端(Eureka Client)。

  1. Eureka 服务器:- 提供服务注册和发现的功能。- 通常会有多个 Eureka 服务器实例组成一个集群,以提高可用性。
  2. Eureka 客户端:- 服务提供者(Service Provider):将自己的服务信息注册到 Eureka 服务器。- 服务消费者(Service Consumer):从 Eureka 服务器获取服务提供者的信息,并进行远程调用。

Eureka 的使用

1. 搭建 Eureka 服务器

首先,需要在项目中引入 Eureka 服务器的依赖。如果是使用 Spring Boot 和 Spring Cloud,可以在

pom.xml

build.gradle

中添加以下依赖:

<!-- 对于 Maven 项目 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
// 对于 Gradle 项目
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

然后,创建一个 Spring Boot 应用,并添加

@EnableEurekaServer

注解:

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

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

application.yml

application.properties

中配置 Eureka 服务器:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2. 注册服务到 Eureka

在服务提供者的项目中引入 Eureka 客户端的依赖:

<!-- 对于 Maven 项目 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
// 对于 Gradle 项目
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

在服务提供者的 Spring Boot 应用中添加

@EnableEurekaClient

注解:

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

@SpringBootApplication
@EnableEurekaClient
public class ServiceProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }
}

application.yml

application.properties

中配置 Eureka 客户端:

server:
  port: 8081

spring:
  application:
    name: service-provider

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
3. 发现服务并进行调用

在服务消费者的项目中引入 Eureka 客户端的依赖,并配置 Eureka 客户端:

<!-- 对于 Maven 项目 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
// 对于 Gradle 项目
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

在服务消费者的 Spring Boot 应用中添加

@EnableDiscoveryClient

注解:

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

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
}

application.yml

application.properties

中配置 Eureka 客户端:

server:
  port: 8082

spring:
  application:
    name: service-consumer

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

使用

RestTemplate

Feign

进行服务调用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @GetMapping("/consume")
    public String consume() {
        return restTemplate.getForObject("http://service-provider/hello", String.class);
    }
}

总结

Eureka 是一个强大的服务注册和发现工具,适用于微服务架构。通过 Eureka,服务提供者可以注册自己的服务信息,服务消费者可以发现并调用这些服务。Eureka 提供了高可用性和容错性,确保了服务的稳定运行。通过 Spring Cloud 的支持,Eureka 的使用变得更加简单和便捷。

希望大家喜欢,喜欢麻烦点个赞,收藏一下。

标签: eureka

本文转载自: https://blog.csdn.net/2401_86162311/article/details/140247374
版权归原作者 世间真理 所有, 如有侵权,请联系我们删除。

“Eureka介绍与使用”的评论:

还没有评论