📅  最后修改于: 2023-12-03 15:05:16.716000             🧑  作者: Mango
Spring 服务发现是在分布式系统中自动寻找服务实例的一种机制。当使用微服务架构时,通过服务发现机制可以更加容易地实现服务的发现和调用,从而提高系统的可靠性和可拓展性。
服务发现是在分布式系统中,通过把服务注册到一个共享的注册中心中,然后通过服务发现机制去查询可用的服务实例。服务发现的主要概念如下:
Spring Cloud 提供了一套完整的服务治理方案,其中包括服务注册与发现、负载均衡、断路器等功能。Spring Boot 应用可以将自己作为服务提供者注册到注册中心,也可以作为服务消费者去发现服务并调用其接口。
服务注册功能由 Spring Cloud Eureka 实现,基于 Netflix Eureka 构建。要使用 Eureka,只需要在 pom.xml 中添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
然后在启动类上添加 @EnableEurekaServer
注解,就可以将应用注册为 Eureka 服务器了。
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
在应用启动后,可以通过 http://localhost:8761 查看注册中心的管理后台。
服务发现功能由 Spring Cloud Netflix Ribbon 实现,Ribbon 是一种客户端负载均衡器。在使用 Ribbon 之前,需要在 pom.xml 中添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
然后在应用主类上添加 @EnableDiscoveryClient
注解,表示应用作为服务消费者注册到服务发现中心。
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
在使用 Ribbon 调用服务时,可以通过 LoadBalancerClient
获取注册中心的服务列表,然后根据负载均衡策略选择一个可用的服务。
@Service
public class OrderService {
@Autowired
private LoadBalancerClient loadBalancerClient;
@HystrixCommand(fallbackMethod = "getDefaultOrder")
public String getOrder() {
ServiceInstance instance = loadBalancerClient.choose("order-service");
String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/order";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return result;
}
public String getDefaultOrder() {
return "default order";
}
}
Ribbon 提供了多种负载均衡策略,可以按需配置。默认的负载均衡策略是轮询,即依次访问可用的服务实例。如果要修改负载均衡策略,只需要在应用配置文件中添加以下内容:
order-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
其中 RandomRule
表示采用随机的负载均衡策略。
Spring Cloud 提供了完整的服务发现方案,可以方便地实现服务的注册、发现和调用。在微服务架构中,使用服务发现可以提高系统的可靠性和可拓展性,是一种非常有价值的技术。