前文的电影微服务是使用RestTemplate(通过整合Ribbon实现负载均衡)调用RESTful API的。本节让电影微服务使用Feign,实现声明式的RESTfulAPI调用。
1.复制项目microservice-consumer-movie,将ArtifactId修改为microservice-consumer-movie-feign。
2.添加Feign的依赖。
3.创建一个Feign接口,并添加@FeignClient注解。
@FeignClient注解中的microservice-provider-user是一个任意的客户端名称,用于创建Ribbon负载均衡器。在本例中,由于使用了Eureka,所以Ribbon会把microserviceprovider-user解析成EurekaServer服务注册表中的服务。当然,如果不想使用Eureka,可使用service.ribbon.listOfServers属性配置服务器列表(详见第5.4节)。
还可使用url属性指定请求的URL(URL可以是完整的URL或者主机名),例如@FeignClient(name="microservice-provider-user",ur l="http://localhost:8000/")。
4.修改Controller代码,让其调用Feign接口。
5.修改启动类,为其添加@EnableFeignClients注解,如下:
这样,电影微服务就可以用Feign去调用用户微服务的API了。
测试
1.启动microservice-discovery-eureka。
2.启动2个或更多microservice-provider-user实例。
3.启动microservice-consumer-movie-feign。
4.多次访问 http://localhost:8010/user/1 ,返回如下结果。
两个用户微服务实例都会打印类似如下的日志。
以上结果说明,我们不但实现了声明式的RESTAPI调用,同时还实现了客户端侧的负载均衡。