一、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

  

应用间通信方式HTTP和RPC的更多相关文章

  1. Linux的进程/线程间通信方式总结

    Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...

  2. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

  3. Vue组件间通信方式到底有几种

    1. 前言 Vue的一个核心思想就是组件化.所谓组件化,就是把页面拆分成多个组件 (component),每个组件依赖的 CSS.JavaScript.模板.图片等资源放在一起开发和维护.组件是资源独 ...

  4. springboot+cloud 学习(二)应用间通信Feign(伪RPC,实则HTTP)

    在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术:  RPC or Restful Restful架构是基于Http应用层协议的产物,RPC架构是基于TCP传输 ...

  5. c++ 线程间通信方式

    一:两个进程间的两个线程通信,相当于进程间通信 二:一个进程中的两个线程间通信 通信方式: 1.互斥锁 mutex; lock_guard (在构造函数里加锁,在析构函数里解锁) unique_loc ...

  6. 进程&线程间通信方式总结

    一.进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (namedpip ...

  7. Vue组件间通信方式

    一.Props传递数据 在父组件中使用子组件,本质通过v-bind绑定属性传入子组件,子组件通过props接收父组件传入的属性 <template> <div> 父组件:{{m ...

  8. SpringCloud-服务间通信方式

    接下来在整个微服务架构中,我们比较关心的就是服务间的服务改如何调用,有哪些调用方式? 总结:在springcloud中服务间调用方式主要是使用 http restful方式进行服务间调用 1. 基于R ...

  9. 【微服务落地】服务间通信方式: gRPC的入门

    gRPC是什么 官方介绍: https://grpc.io/docs/what-is-grpc/introduction/ "A high-performance, open-source ...

随机推荐

  1. linux下关于PCL(point cloud library)库的安装,三行命令错误的问题

    最近想再看看PCL,所以进行了安装,在之前的接触的过程中,由于之前的网络存在问题,导致以下三个命令: sudo add-apt-repository ppa:v-launchpad-jochen-sp ...

  2. Microsoft Project 常用快捷键

    任务升级 : ALT  +  SHIFT + 向左键 任务降级: ALT  +  SHIFT + 向右键 滚动到表头(第一个任务):Ctrl + HOME 滚动到表尾(最后一个任务):Ctrl + E ...

  3. JAVA Collections.shuffle打乱列表

    在JAVA中如果想打乱LIST的顺序可以调用Collections.shuffle()或者Collections.shuffle(List<?> list, Random rnd)方法. ...

  4. win10上Adobe Acrobat打开后停止工作

    额,,之前是WIN7,装上没问题,结果更新WIN10之后,突然打开就直接崩溃,,,,,上百度搜了挺多方法,知乎上有个人说,,,卸载必应词典就行了,,真的还可以,哈哈哈~

  5. 日期和API

    Java1.0对日期和时间的支持只能依赖java.util.Date类,年份的起始选择是1900你那,月份的起始是从0开始计算的.它的返回值中包含了JVM的默认市区CET,即中欧时间.在Java1.1 ...

  6. python 模块基础 和常用的模块

    模块的定义 一个模块就是以.py结尾的python 文件,用来从逻辑上组织python代码.注意,模块名和变量名一样开头不能用数字,可以是双下划线和字母. 为什么要用模块? 将一些复杂的需要重复使用的 ...

  7. lua 取table长度

    http://blog.csdn.net/wangmanjie/article/details/52793902 static int unbound_search (Table *t, unsign ...

  8. Nginx 浏览器打开是下载状态

    location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_inf ...

  9. 内置变量WEBGL

    gl_FragCoord是片元着色器中的只读变量,它保存了片元相对窗口的坐标位置:x, y, z, 1/w.这个值是顶点处理产生片元后固定功能内插图元的结果.组件z是用于表示片元深度的深度值. gl_ ...

  10. Django之模型层-了解ORM

    ORM(对象-关系-映射)简单使用 ORM实现了数据模型与数据库的解耦合,即数据模型的设计不需要指定特定的数据库,通过python代码可以直接对数据库实现增删改查 MySQL语法 #sql中的表 #创 ...