📅  最后修改于: 2023-12-03 14:41:01.944000             🧑  作者: Mango
Eureka 是一个开源的,基于 REST (Representational State Transfer,即表述性状态转移) 的服务发现和注册服务。它由 Netflix 开发,主要用于服务定位、负载均衡和容灾等功能。
Eureka 的核心功能之一是服务发现,它可以让服务消费者快速的找到需要调用的服务提供者,从而实现分布式系统中的服务发现。
服务提供者可以将自己注册到 Eureka 服务器,以便服务消费者可以通过 Eureka 服务器发现它们。
Eureka 提供了自我保护机制,能够防止由于 Eureka 服务器网络问题等原因导致的服务实例列表过期而导致服务不可用。
Eureka 支持多数据中心的部署,保证了多数据中心情况下的高可用性和跨数据中心调用。
在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.netflix.eureka</groupId>
<artifactId>eureka-client</artifactId>
<version>1.10.7</version>
</dependency>
在项目的配置文件中,添加 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
在启动类或者应用类上添加 @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) {
// ...
}
}
在浏览器中访问 Eureka Server 的 Dashboard:
http://localhost:8761/
可以看到注册的服务实例信息。
在需要调用注册的服务的代码中,使用 @Autowired
注解注入服务类,进行服务调用。
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
}
Eureka 是 Netflix 开发的服务注册和发现框架,是微服务架构下的重要组件之一。它提供了服务发现、服务注册、自我保护机制和多数据中心支持等功能,可以帮助开发者构建高可用的分布式系统。