title: SpringCloud学习总结二
date: 2020-06-10
categories:
- Eureka注册中心
tags: - SpringCloud
- Eureka注册中心
- RestTemplate
Eureka注册中心(二)
1.编写服务消费者
1.1 直接调用接口
创建一个maven项目service-consumer,然后添加依赖,依赖和服务提供者的一样。启动类也一样。
唯一不一样的是配置信息:
spring.application.name=service-consumer
server.port=8082
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率。我们通过配置RestTemplate来调用接口,代码如下:
@Configuration
public class BeanConfiguration {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
创建接口,在接口中调用house/hello接口,代码如下:
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/callHello")
public String callHello() {
return restTemplate.getForObject("http://localhost:8081/house/hello", String.class);
}
}
启动启动类启动消费者服务,访问localhost:8082/consumer/callHello看看有没有返回hello字符串,返回了就证明调用成功。
4.2 通过Eureka来消费接口
上面是直接通过服务接口的地址来调用的,完全没有用到Eureka带给我们的便利。既然用了注册中心,那么客户端调用的时候肯定是不需要关心有多少个服务提供接口,下面我们来改造之前的调用代码。
首先改造RestTemplate的配置,添加一个@LoadBalanced注解,这个注解会自动构造LoadBalancerClient接口的实现类并注册到Spring容器中,代码如下:
@Configuration
public class BeanConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
接下来就是改造调用代码,我们不再直接写固定地址,而是写成服务的名称,这个名称就是我们注册到Eureka中的明称,是属性文件中的spring.application.name,代码如下:
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/callHello")
public String callHello() {
return restTemplate.getForObject("http://provider/privoder/hello", String.class);
}
}