📜  Eureka命名服务器(1)

📅  最后修改于: 2023-12-03 14:41:01.944000             🧑  作者: Mango

Eureka 命名服务器

Eureka 是一个开源的,基于 REST (Representational State Transfer,即表述性状态转移) 的服务发现和注册服务。它由 Netflix 开发,主要用于服务定位、负载均衡和容灾等功能。

功能特点
服务发现

Eureka 的核心功能之一是服务发现,它可以让服务消费者快速的找到需要调用的服务提供者,从而实现分布式系统中的服务发现。

服务注册

服务提供者可以将自己注册到 Eureka 服务器,以便服务消费者可以通过 Eureka 服务器发现它们。

自我保护机制

Eureka 提供了自我保护机制,能够防止由于 Eureka 服务器网络问题等原因导致的服务实例列表过期而导致服务不可用。

多数据中心支持

Eureka 支持多数据中心的部署,保证了多数据中心情况下的高可用性和跨数据中心调用。

使用场景
  • 微服务架构下的服务发现和注册
  • 高可用服务的注册和发现
  • 跨数据中心的服务调用
使用示例
1. 添加 Maven 依赖

在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.netflix.eureka</groupId>
    <artifactId>eureka-client</artifactId>
    <version>1.10.7</version>
</dependency>
2. Config 配置

在项目的配置文件中,添加 Eureka 的配置:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    preferIpAddress: true
    instanceId: ${spring.cloud.client.ipAddress}:${server.port}
    health-check-url: http://${spring.cloud.client.ipAddress}:${server.port}/actuator/health
    status-page-url: http://${spring.cloud.client.ipAddress}:${server.port}/actuator/info
    metadata-map:
      # 服务权重
      weight: 1
3. 注解

在启动类或者应用类上添加 @EnableEurekaClient 注解,同时在需要注册的服务类上添加 @Service 注解。

@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}
@Service
public class UserServiceImpl implements UserService {

    @Override
    public User getUserById(Long id) {
        // ...
    }

}
4. 访问 Eureka Dashboard

在浏览器中访问 Eureka Server 的 Dashboard:

http://localhost:8761/

可以看到注册的服务实例信息。

5. 使用注册的服务

在需要调用注册的服务的代码中,使用 @Autowired 注解注入服务类,进行服务调用。

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

}
总结

Eureka 是 Netflix 开发的服务注册和发现框架,是微服务架构下的重要组件之一。它提供了服务发现、服务注册、自我保护机制和多数据中心支持等功能,可以帮助开发者构建高可用的分布式系统。