这里最关键的就是加上@LoadBalanced
@SpringBootApplication
public class ConsumerMovieApplication {
@Bean
@LoadBalanced -- 如果这行代码注释了,则下面的controller则调不通
public RestTemplate restTemplate() {
return new RestTemplate();
} public static void main(String[] args) {
SpringApplication.run(ConsumerMovieApplication.class, args);
}
}
@RequestMapping("/movies")
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate; @GetMapping("/users/{id}")
public User findById(@PathVariable Long id) {
// 这里用到了RestTemplate的占位符能力
User user = this.restTemplate.getForObject(
"http://microservice-provider-user/users/{id}", -- 如果上面的@LoadBalanced 注释了会调不通
User.class,
id
);
// ...电影微服务的业务...
return user;
}
}
把@LoadBalanced注释了,则出现的错误如下:
所以这个注解必须要在RestTemplate这个类中加上。