为了更好地理解 Spring Cloud LoadBalancer 的实战应用服务发现,我们可以通过一个示例来演示其具体的应用。本示例基于 Spring Cloud Greenwich 版本和 Eureka 作为服务注册中心。
1. 创建服务提供者
首先,我们需要创建一个简单的服务提供者,提供一个 hello 接口,返回 "Hello, World!" 字符串。在 pom.xml 文件中添加如下依赖:
代码语言:javascript复制<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在配置文件中添加如下配置:
代码语言:javascript复制spring:
application:
name: service-provider
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
创建一个简单的 Controller 类,实现 hello 接口:
代码语言:javascript复制@RestController
public class ProviderController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
2. 创建服务消费者
接下来,我们需要创建一个服务消费者,调用服务提供者的 hello 接口,并返回其结果。在 pom.xml 文件中添加如下依赖:
代码语言:javascript复制<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
在配置文件中添加如下配置:
代码语言:javascript复制spring:
application:
name: service-consumer
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
创建一个简单的 Controller 类,实现 hello 接口:
代码语言:javascript复制@RestController
public class ConsumerController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/hello")
public String hello() {
ServiceInstance serviceInstance = loadBalancerClient.choose("service-provider");
String url = "http://" serviceInstance.getHost() ":" serviceInstance.getPort() "/hello";
return restTemplate.getForObject(url, String.class);
}
}
3. 启动
启动 Eureka 服务注册中心,在 pom.xml 文件中添加如下依赖:
代码语言:javascript复制<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在配置文件中添加如下配置:
代码语言:javascript复制server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
创建一个启动类,添加 @EnableEurekaServer 注解:
代码语言:javascript复制@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
启动服务注册中心后,启动服务提供者和服务消费者。访问服务消费者的 hello 接口,可以看到输出了服务提供者返回的 "Hello, World!" 字符串。
通过 Eureka 的服务注册和发现,服务提供者和服务消费者实现了解耦,同时通过 Spring Cloud LoadBalancer,服务消费者可以自动实现负载均衡,以提高系统的可用性和性能。