服务之间调用方式
- 服务拆分后通过轻量级的接口进行互相调用,如http或rpc,轻量级的接口保证了整个系统是异构的,服务可以跨语言,跨平台。
- springcloud采用http通信,dubbo采用rpc通信
- springcloud服务间有两种restful调用方式:RestTemplate 和 Feign
RestTemplate调用其他服务
直接写死被调用方的url,缺点是:1.不知道对方的ip地址 2.对方有多个实例服务,无法负载均衡
1
2
3
4
5
6
7
8
9
10
"/restTemplate") (
public class Controller {
"/hello") (
public String getHello() {
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject("http://localhost:8761/test/hello", String.class); // 返回 hello
}
}通过loadBalancerClient从注册中心获取被调用的ip和端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"/restTemplate") (
public class Controller {
private LoadBalancerClient loadBalancerClient;
"/hello") (
public String getHello() {
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT"); //application 的 name
String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) + "/test/hello";
return restTemplate.getForObject(url, String.class); //返回hello
}
}通过
@LoadBalanced
注解从注册中心获取ip和端口
1 | // RestTemplateConfig.java |
1 | //Controller.java |