Eureka介绍与使用

发布于:2024-06-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

Eureka 是 Netflix 开发的一个 RESTful 服务,用于在 AWS 云中定位服务,以实现负载均衡和中间层服务器的故障转移。它主要用于微服务架构中,作为服务注册与发现的工具。Eureka 有两个主要组件:Eureka 服务器和 Eureka 客户端。

### Eureka 服务器

Eureka 服务器是一个服务注册中心。所有的服务提供者(微服务)都会在 Eureka 服务器上注册自己的服务,同时服务消费者(需要调用其他微服务的服务)也会从 Eureka 服务器上获取服务列表,从而实现服务的发现和调用。

#### 启动一个 Eureka 服务器

1. **创建一个 Spring Boot 项目**:
   使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加 Eureka Server 依赖。

2. **配置 Eureka 服务器**:
   在 `application.properties` 或 `application.yml` 文件中添加 Eureka 服务器的配置。

   ```properties
   server.port=8761

   eureka.client.register-with-eureka=false
   eureka.client.fetch-registry=false
   ```

3. **启用 Eureka 服务器**:
   在 Spring Boot 主类上添加 `@EnableEurekaServer` 注解。

   ```java
   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);
       }
   }
   ```

### Eureka 客户端

Eureka 客户端是需要注册到 Eureka 服务器上的服务提供者或服务消费者。服务提供者在启动时会向 Eureka 服务器注册自己的信息,并定期发送心跳以保持注册信息的有效性。服务消费者则从 Eureka 服务器获取服务提供者的信息,以进行远程调用。

#### 启动一个 Eureka 客户端

1. **创建一个 Spring Boot 项目**:
   使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加 Eureka Client 依赖。

2. **配置 Eureka 客户端**:
   在 `application.properties` 或 `application.yml` 文件中添加 Eureka 客户端的配置。

   ```properties
   server.port=8080

   eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
   eureka.instance.prefer-ip-address=true
   ```

3. **启用 Eureka 客户端**:
   在 Spring Boot 主类上添加 `@EnableEurekaClient` 注解。

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

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

4. **注册服务**:
   将需要注册的服务在启动时自动注册到 Eureka 服务器上。在服务启动类或者配置文件中指定服务的名称。

   ```properties
   spring.application.name=my-service
   ```

### 使用 Eureka 进行服务发现

服务消费者通过 Eureka 服务器获取服务提供者的地址列表,并通过负载均衡等方式调用服务。

1. **使用 RestTemplate 调用服务**:
   配置 RestTemplate 并使用 `@LoadBalanced` 注解实现负载均衡。

   ```java
   import org.springframework.cloud.client.loadbalancer.LoadBalanced;
   import org.springframework.context.annotation.Bean;
   import org.springframework.context.annotation.Configuration;
   import org.springframework.web.client.RestTemplate;

   @Configuration
   public class RestTemplateConfig {

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

2. **调用服务**:
   使用服务名替代具体的 IP 地址或域名进行服务调用。

   ```java
   @Autowired
   private RestTemplate restTemplate;

   public String callService() {
       return restTemplate.getForObject("http://my-service/endpoint", String.class);
   }
   ```

通过上述步骤,可以快速搭建一个基于 Eureka 的服务注册与发现机制,方便在微服务架构中实现服务的自动发现和调用。


网站公告

今日签到

点亮在社区的每一天
去签到