一、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. shell脚本-实战防dos攻击

    根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟.防火墙命令为:iptables -I INPUT -s 10.0 ...

  2. golang实现一个代理服务器(proxy)学习笔记

    golang是google公司开发一门新的编程语言.对于老的程序员来说,学习一门语言最好的方式,不过是做一个小的项目. 网上看到这一篇使用golang开发proxy的例子,觉得挺有意思.希望通过实际模 ...

  3. Java学习笔记28(IO字节流)

    IO定义: 写:Output操作:将内存上的数据持久化 到设备上,这个动作称为输出: 读:Input操作:把硬盘上的东西读取到内存,这个动作称为输入:              这两种操作称为IO流 ...

  4. Python中的分支结构和循环结构

    一.分支结构 语法: if  条件  :     .... else :    .... 例子: num = int(input("输入一个整数:")) if num<=10 ...

  5. Python之路,第三篇:Python入门与基础3

    1,  布尔运算符 运算符;    not      and   or not 运算符: 作用:逻辑取反 语法: not  表达式 例: not  True     #  False not   Fa ...

  6. 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 题意:多组输入,开始字符 ...

  7. s21day05 python笔记

    s21day05 python笔记 一.昨日内容回顾及补充 回顾 补充 列表独有功能 extend:循环添加到一个列表中 1.users = ['张三',66],people = ['王五',99] ...

  8. box布局中文字溢出问题

    如果不设置-webkit-box-flex:1:会溢出,设置width也行,在电脑上模拟可能会有问题,手机上没问题

  9. PHP5和PHP7的安装、PHP和apache的整合!

    1.PHP5的安装: 下载: wget -c http://cn2.php.net/distributions/php-5.6.36.tar.gz  (php5) wget -c http://cn2 ...

  10. JavaSE笔记

    this关键字 哪个对象调用方法,方法定义中的this即为该对象的引用! static关键字 使用static声名的成员变量为静态成员变量,在第一次使用的时候被初始化,static成员变量只有一份 使 ...