使用LoadBalancerClient
在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient
、LoadBalancerClient
等。
创建一个消费者
首先初始化一个Spring Boot
工程,命名为:eureka-consumer
,在pom.xml
中配置如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
修改配置文件application.yaml
:
server:
port: 2101
spring:
application:
name: eureka-consumer
eureka:
client:
service-url:
# 指定eureka服务注册中心地址
defaultZone: http://localhost:1001/eureka/
在主类中添加@EnableDiscoveryClient
注解将当前应用加入服务治理体系,并且初始化RestTemplate
,用来发起REST请求。
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumerApplication {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
创建一个接口,用来消费eureka-client提供的接口:
@RestController
public class DcController {
@Autowired
LoadBalancerClient loadBalancerClient;
@Autowired
RestTemplate restTemplate;
@GetMapping("/consumer")
public String dc(){
ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/dc";
System.out.println(url);
return restTemplate.getForObject(url, String.class);
}
}
DcController
类中注入了loadBalancerClient
和restTemplate
,并且实现了一个/consumer
接口,先通过loadBalancerClient
的choose
方法负载均衡选出一个eureka-client
的示例,然后利用restTemplate
调用服务提供者的接口。
此时访问:http://localhost:2101/consumer

PS:consul版本其实也是一样的,只要正常启动了consul,并且服务注册成功即可,如果还没注册成功,启动会报错。