HTTP vs RPC
dubbo 是rpc协议|
SpringCloud 是http调用
SpringCloud中服务间两种restful调用方式
RestTemplate
Feign
RestTemplate
第一种方式
RestTemplate restTemplate=new RestTemplate();
String str=restTemplate.getForObject("url",String.class);
url是要调用的服务的url(服务名称+接口名称)
服务器集群是不确定ip 和端口的。所以这种方式就不太好(处理)
第二种方式
@Autowired
private LoadBalancerClient loadBalancerClient
@GetMapping("/test")
test(){
ServiceInstance serviceInstance =loadBalancerClient.choose("ORDER"); //eureka服务注册名称
String url=String.format("http://%s:%s",serviceInstance.getHost(),
serviceInstance.getPort())+"接口url";
RestTemplate restTemplate=new RestTemplate();
String str=restTemplate.getForObject("url",String.class);
}
这种方式每次都要获取服务实例也不好。
第三种方式
package com.hx.order.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Autowired
private RestTemplate restTemplate
@GetMapping("/test")
test(){
String str=restTemplate.getForObject("http://ORDER/url",String.class);
//ORDER 服务名 url 接口名称
}