这里最关键的就是加上@LoadBalanced
1 @SpringBootApplication 2 public class ConsumerMovieApplication { 3 @Bean 4 @LoadBalanced -- 如果这行代码注释了,则下面的controller则调不通 5 public RestTemplate restTemplate() { 6 return new RestTemplate(); 7 } 8 9 public static void main(String[] args) { 10 SpringApplication.run(ConsumerMovieApplication.class, args); 11 } 12 }
@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这个类中加上。