使用RestTemplate对象,通过Eureka注册中心去调用消费已注册的微服务实例。同时使用SpringCloud Ribbon实现负载均衡。
创建ServiceConsume module
pom.xml加入web坐标,Eureka客服端坐标,Ribbon坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
application.properties配置Eureka地址和已注册的微服务实例的应用名称
server.port=8080
#此module不注册到Eureka
eureka.client.register-with-eureka=false
eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
#自定义配置
#要消费的微服务实例的应用名称
provided_url=http://SERVICE
配置类,将RestTemplate对象注入Spring容器,并同时添加@LoadBalanced,实现Ribbon负载均衡
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced //Ribbon负载均衡
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
编写Controller,通过RestTemplate去调用服务接口
@Controller
public class ConsumeController {
@Autowired
private RestTemplate restTemplate; //调用Eureka中心微服务实例的专用对象
@Value("${provided_url}")
String serviceApplication; //微服务上实例的应用名称
@RequestMapping(value="/test.do/{id}/{name}",method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable("id") int id,@PathVariable("name") String name) {
String resu = restTemplate.getForObject(serviceApplication + "/testcontroller.do/"+ id + "/" + name, String.class);
return resu;
}
}
先依次启动Eureka注册中心,再启动三个微服务实例,最后启动此module,多次访问module中的Controller。Ribbon默认的负载均衡算法是轮询算法。