应用间通信方式HTTP和RPC
一、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的更多相关文章
- Linux的进程/线程间通信方式总结
Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- Vue组件间通信方式到底有几种
1. 前言 Vue的一个核心思想就是组件化.所谓组件化,就是把页面拆分成多个组件 (component),每个组件依赖的 CSS.JavaScript.模板.图片等资源放在一起开发和维护.组件是资源独 ...
- springboot+cloud 学习(二)应用间通信Feign(伪RPC,实则HTTP)
在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: RPC or Restful Restful架构是基于Http应用层协议的产物,RPC架构是基于TCP传输 ...
- c++ 线程间通信方式
一:两个进程间的两个线程通信,相当于进程间通信 二:一个进程中的两个线程间通信 通信方式: 1.互斥锁 mutex; lock_guard (在构造函数里加锁,在析构函数里解锁) unique_loc ...
- 进程&线程间通信方式总结
一.进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (namedpip ...
- Vue组件间通信方式
一.Props传递数据 在父组件中使用子组件,本质通过v-bind绑定属性传入子组件,子组件通过props接收父组件传入的属性 <template> <div> 父组件:{{m ...
- SpringCloud-服务间通信方式
接下来在整个微服务架构中,我们比较关心的就是服务间的服务改如何调用,有哪些调用方式? 总结:在springcloud中服务间调用方式主要是使用 http restful方式进行服务间调用 1. 基于R ...
- 【微服务落地】服务间通信方式: gRPC的入门
gRPC是什么 官方介绍: https://grpc.io/docs/what-is-grpc/introduction/ "A high-performance, open-source ...
随机推荐
- shell脚本-实战防dos攻击
根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟.防火墙命令为:iptables -I INPUT -s 10.0 ...
- golang实现一个代理服务器(proxy)学习笔记
golang是google公司开发一门新的编程语言.对于老的程序员来说,学习一门语言最好的方式,不过是做一个小的项目. 网上看到这一篇使用golang开发proxy的例子,觉得挺有意思.希望通过实际模 ...
- Java学习笔记28(IO字节流)
IO定义: 写:Output操作:将内存上的数据持久化 到设备上,这个动作称为输出: 读:Input操作:把硬盘上的东西读取到内存,这个动作称为输入: 这两种操作称为IO流 ...
- Python中的分支结构和循环结构
一.分支结构 语法: if 条件 : .... else : .... 例子: num = int(input("输入一个整数:")) if num<=10 ...
- Python之路,第三篇:Python入门与基础3
1, 布尔运算符 运算符; not and or not 运算符: 作用:逻辑取反 语法: not 表达式 例: not True # False not Fa ...
- HDU - 5421:Victor and String (回文树,支持首尾插入新字符)
Sample Input 6 1 a 1 b 2 a 2 c 3 4 8 1 a 2 a 2 a 1 a 3 1 b 3 4 Sample Output 4 5 4 5 11 题意:多组输入,开始字符 ...
- s21day05 python笔记
s21day05 python笔记 一.昨日内容回顾及补充 回顾 补充 列表独有功能 extend:循环添加到一个列表中 1.users = ['张三',66],people = ['王五',99] ...
- box布局中文字溢出问题
如果不设置-webkit-box-flex:1:会溢出,设置width也行,在电脑上模拟可能会有问题,手机上没问题
- PHP5和PHP7的安装、PHP和apache的整合!
1.PHP5的安装: 下载: wget -c http://cn2.php.net/distributions/php-5.6.36.tar.gz (php5) wget -c http://cn2 ...
- JavaSE笔记
this关键字 哪个对象调用方法,方法定义中的this即为该对象的引用! static关键字 使用static声名的成员变量为静态成员变量,在第一次使用的时候被初始化,static成员变量只有一份 使 ...