1.你要有两个服务,一个是服务消费方(下图的xing-movie是消费方),一个是服务提供方(xing-user是服务提供者),并且服务提供方要有两个实例,也就是xing-user有两个实例,分别运行在8070和8071端口。
2.所有服务注册到eureka server中。
接下来我们在movie服务使用ribbon实现负载均衡调用中调用user服务,spring cloud使用ribbon很简单
1.引入依赖,因为user服务的pom.xml中引入了eureka的依赖,eureka的依赖包含了ribbon的依赖所以这一步省略
2.在movie服务的启动类中加入标红的代码,加入是为了在之后调用的时候可以直接@Autowired restTemplate,顺便提醒一下,@Autowired是 byType的,不是byName:
package com.xing.movie;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
public class SpringDemoApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(SpringDemoApplication.class, args);
}
}
启动类写好之后我们去controller类中写调用user服务的方法:
@Autowired
private RestTemplate restTemplate;
@ApiOperation(value = "查询用户", notes = "查询用户")//方法说明
@ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Movie.class)})//响应数据说明,可以有多个
@ApiImplicitParam(name = "name", value = "用户名", paramType = "path", required = true, dataType = "String")
@GetMapping(value = "/findUerByName/{name}",produces = { "application/json;charset=UTF-8" })
public User findUserByName(@PathVariable String name) {
return this.restTemplate.getForObject("http://xing-user/user/findByName/"+name, User.class);
}