一、HTTP和RPC
1、Dobbo RPC框架
2、Sping Cloud 微服务架构下的一站式解决方案。 微服务之间使用的是 Http restful方式
二、SpringCloud中服务间两种restful
RestTemplate
Feign
三、RestTemplate
RestTemplate 是一款http客户端,RestTemplate和httpclient功能差不多,用法上RestTemplate更简单。
例如订单服务-> (调用) 商品服务
第一种方式:直接使用RestTemplate,url硬编码
在product产品服务中增加接口 msg
然后在order订单服务中调用
order服务的端口设置为-Dserver.port=8081
测试:
缺点:
1、访问方式使用IP硬编码,如果IP换了,就无法访问了。
2、如果product有多个地址,如http://localhost:8080/msg, http://localhost:9080/msg,这样就涉及负载均衡,同样硬编码IP地址会有问题。
第二种方式:利用LoadBalancerClient ,通过应用名获得Url,然后在使用restTemplate
@RestController @Slf4j public class ClientController { @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/getProductMsg") public String getProductMsg(){ //使用RestTemplate RestTemplate restTemplate = new RestTemplate(); //1.第一种方式 /* String response = restTemplate.getForObject("http://localhost:8080/msg", String.class);*/ //2、第二种方式 ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT"); String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) + "/msg"; String response = restTemplate.getForObject(url, String.class); log.info("url={},response={}",url,response); return response; } }
第三种方式 (利用@LoadBalanced,可在restTemplate里使用应用的名字
1、增加RestTemplate的bean,然后增加注解LoadBalanced
@RestController @Slf4j public class ClientController { @Autowired private RestTemplate restTemplate; @GetMapping("/getProductMsg") public String getProductMsg(){ //使用RestTemplate //3.第三种方式 String response = restTemplate.getForObject("http://PRODUCT/msg", String.class); log.info("response={}",response); return response; } }
以上方式负载均衡采用轮训的策略,如果要改变成随机的方式,只需做如下配置
PRODUCT: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!