微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念

A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用)

HTTP同步通信

  • 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式
  • 使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET、POST、PUT、DELETE等),已经成为替代传统SOAP Web 服务的流行方案
  • 具体的类库包括httpclient、RestTemplate、OkHttp,包括Springcloud 中的OpenFegin
  • 但是当服务之间的调用较为频繁时,我们一般不会用HTTP调用了,而是选择基于TCP的RPC调用

RPC同步通信

  • RPC即Remote Procedure Call(远程过程调用),可确保调用性能更加高效,能支持更高的并发量
  • 因为RPC通信过程在传输层(HTTP通信过程在应用层中完成),所以使用RPC调用方式需要在服务层和客户端之间建立Socket连接来实现二进制数据的交换
  • RPC是面向服务的,关注于行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词
  • RPC框架来屏蔽底层的通信过程,这是RPC框架的核心价值,使得我们更加专注于业务开发

RPC协议的实现框架

主流 RPC 框架有 Dubbo、gRPC、bRPC 和 Thrift以及RMI、SpringCloud等
从github star来看,Dubbo > gRPC > bRPC > Thrift

异步通信

  • 当客户端调用服务端时,并不需要等待服务端做出响应时,就要使用异步调用,毕竟使用HTTP或RPC改造成异步调用的成本相关较高,所以更容易使用的是基于MQ(Message Queue 消息队列)来实现服务之间的异步调用
  • 通过消息队列实现微服务之间的异步通信,每个服务只需要关注自己的消息队列即可,实现了服务之间的解耦,常见的消息队列包括RabbitMQ、Kafka和ActiveMQ等

总结

  • 当一个服务调用另一个服务时,最简单的就是基于HTTP的同步调用,只需目标服务对外暴露相关HTTP请求地址(包括域名或IP、端口、路径等),调用方就能通过该HTTP请求地址调用目标服务
  • 当服务之间的调用较为频繁时,就需要选择基于TCP的RPC调用,这种方式可确保性能更加高效,能支持更高的并发量
  • 当客户可调用服务端时不需要等待服务端马上做出响应时,就应该使用异步调用,比较容易使用的是基于MQ来实现服务之间的异步调用
  • 当要求服务之间的调用必须同步时,可使用MQ开发基于请求应答模式的RPC调用框架

其他

HTTP协议和RPC协议区别

功能层面

  • http是应用层的超文本传输协议,主要用于网页端和服务端进行传输数据
  • 而RPC是远程过程调用协议,它用于应用进程间的通信,屏蔽了通信底层的复杂度,我们开发者就可以去像调用本地服务一样去完成远程服务的一个调用

实现层面

  • http是一个成熟的应用层协议,它定义了通信报文格式(request/response header,body等),符合这种协议特征的才属于http协议
  • 而RPC只是一种通信协议的规范,并没有实现,只有按照RPC通信协议规范实现的通信框架才是协议具体的实现,比如dubbo,grpc,因此我们可以自定义报文规范、自定义序列化方式、自定义网络通信协议类型来作为RPC的实现框架

应用层面

  • http协议和实现了RPC规范的框架都可以实现跨网络节点的服务通信,并且它们底层都是用TCP/IP协议作为通信基础。而RPC网络通信协议层我们可以自定义,所以可以通过http协议去实现,比如grpc,openFegin
相关推荐
Y***h1871 小时前
第二章 Spring中的Bean
java·后端·spring
8***29311 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger1 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***06292 小时前
Tomcat的升级
java·tomcat
多多*2 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交2 小时前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
摇滚侠2 小时前
2025最新 SpringCloud 教程,从单体到集群架构,笔记02
笔记·spring cloud·架构
d***81722 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
ᐇ9592 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐
听风吟丶3 小时前
MyBatis 深度实战:从基础映射到企业级性能优化
java·tomcat