Eureka注册中心是Netflix开源的一款服务发现工具,用于实现微服务架构中的服务注册与发现。Eureka注册中心可以用于管理和监控微服务架构中的各个服务实例,并提供了服务发现和故障转移功能。通过Eureka注册中心,微服务之间可以互相感知和调用,实现高可用性和弹性扩展。Eureka注册中心具有简单易用、可靠性强、支持大规模部署等特点,被广泛应用于微服务架构中。
引入SpringCloud为eureka提供的starter依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
给eureka-server服务编写一个启动类,一定要添加一个@EnableEurekaServer注解,开启eureka的注册中心功能:
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
启动微服务,然后在浏览器访问:http://127.0.0.1:10086
注意:一个微服务,既可以是服务提供者,又可以是服务消费者,因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端
在需要注册的服务模块注册到eureka中
在需要注册的服务模块(user-service)的pom文件中,引入下面的eureka-client依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
我们将order-service的逻辑修改:向eureka-server拉取user-service的信息,实现服务发现。
在order-service的pom文件中,引入下面的eureka-client依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息:
在order-service中,修改application.yml文件,添加服务名称、eureka地址:
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡,只需要添加一些注解即可。
在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
修改order-service服务中的top.zsyp.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:
public Order queryOrderById(Long orderId) {
Order order = orderMapper.findById(orderId);
// String url = "http://localhost:8081/user/" + order.getUserId();
String url = "http://userservice/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
order.setUser(user);
return order;
}
?使用Eureka作为服务发现和注册中心时,需要注意以下事项:
Eureka是一个关键的基础设施组件,必须保证其高可靠性。因此,应该部署多个Eureka服务器并进行集群配置,以确保任何单一节点的故障不会影响整个系统的正常运行。
心跳和超时:Eureka通过定期发送心跳来检查服务实例的健康状况。确保服务实例及时响应心跳请求,并调整心跳和超时设置以适应网络条件和负载。
在多个Eureka服务器之间进行集群配置时,要确保它们的配置文件保持一致。任何配置的更改都应该在所有节点上进行同步,以避免不一致和错误。
对Eureka服务器进行监控,包括其健康状况、负载情况和可用性。可以使用监控工具和告警系统来及时发现和解决潜在的问题。