面试官: 微服务通讯方式有哪些?

磊哥课程2024-03-12 15:45:54  104

微服务的通讯方式主要有以下几种:

RESTful API:基于 HTTP 协议的 RESTful API 是最常用的微服务通讯方式之一。服务之间通过 HTTP 请求和响应进行通讯,实现数据交换。这种方式简单、通用,适用于各种场景,但可能不适合对实时性要求非常高的场景。

RPC(远程过程调用):RPC 允许一个服务像调用本地方法一样调用另一个服务的方法。它通过将方法调用封装成网络数据包并在不同的进程之间传输,实现不同服务之间的互相调用。RPC 方式可以提高调用的效率和性能,但可能需要更多的配置和管理工作。

消息队列通讯:如 RabbitMQ、Kafka、RocketMQ 等,服务之间不直接调用,而是通过消息队列进行异步消息传递,实现服务之间的解耦和异步处理。

事件驱动通讯:服务之间通过事件触发通讯,一旦某个服务发生了某个事件,就会触发其他服务的响应。这种方式可以实现服务的松耦合和事件的实时处理,典型的实现如 Event Bus。

WebSocket(长连接通信):使用 WebSocket 实现双向通信,常用于实时推送场景,服务间可以维持长期的 TCP 连接进行数据交换。

其中,RESTful API 和 RPC 是微服务间最常用的通讯方式,但它们的使用场景又略有不同:

RESTful API 通常用于外部接口或第三方接口通讯。

RPC 通常用于内部微服务之间的方法调用。

1.RESTful API VS RPC

它们的区别主要体现在以下几点:

功能和用途不同

RESTful API 常用于浏览器和服务器之间的通信,第三方接口通讯等,它可以实现基于请求-响应模式的通信,支持无状态和有状态的交互。

RPC 是一种用于远程过程调用的协议,用于不同计算节点之间的通信,多用于微服务内部间的调用。它允许应用程序通过网络调用远程服务,并像调用本地方法一样轻松实现分布式系统的集成。

数据格式不同

RESTful API 使用文本格式来传输数据,通常使用 JSON 或 XML 进行序列化。

RPC 通常使用二进制格式来传输数据,例如 Protocol Buffers(ProtoBuf)或 Apache Thrift。

性能不同:RPC 通常比 RESTful API 更高效。这是因为 RPC 的协议设计更加轻量级,并且它可以对传输的数据进行二进制压缩,使得请求报文体积更小,从而提高传输效率。而 RESTful API 基于 HTTP 协议,其报文头等信息可能使得传输的数据量相对较大,传输效率较低。

2.RESTful API 通讯实现

RESTful API 目前主流的实现方式有以下两种:

RestTemplate:Spring 内置的用于执行 HTTP 请求的类。

Spring Cloud OpenFegin:OpenFeign 是 Spring Cloud 对 Feign 库的封装,提供声明式的 HTTP 客户端,简化了服务调用的编码工作。

具体实现如下。

2.1 RestTemplate 使用

@LoadBalanced@Beanpublic RestTemplate restTemplate { return new RestTemplate;}// 使用时@Autowiredprivate RestTemplate restTemplate;public void callOtherService(String serviceName) { String url = "http://" + serviceName + "/api/path"; ResponseEntity response = restTemplate.getForEntity(url, String.class);}

2.2 Spring Cloud OpenFegin 使用

OpenFegin 引入到项目之后,需要先在 Spring Boot 启动类上添加 @EnableFeignClients 注解,之后使用以下代码就可以实现 RESTful 通讯了:

import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "service-provider") public interface ServiceProviderClient { @GetMapping("/api/hello") String hello; }

3.RPC 通讯实现

RPC 目前主流的通讯方式有以下两种:

Dubbo:阿里巴巴公司开源的一个 Java 高性能优秀的服务框架,它基于 TCP 或 HTTP 的 RPC 远程过程调用,支持负载均衡和容错,自动服务注册和发现。

gRPC:Google 开发的高性能、通用的开源 RPC 框架,它主要面向移动应用开发并基于 HTTP/2 协议标准设计。gRPC 使用 ProtoBuf(Protocol Buffers)作为序列化工具和接口定义语言,要求在调用前需要先定义好接口契约,并使用工具生成代码,然后在代码中调用这些生成的类进行服务调用。

课后思考

RestTemplate 底层是如何实现?Spring Cloud OpenFeign 底层是如何实现的?说说它的执行流程?

本文已收录到我的面试小站 [www.javacn.site](https://www.javacn.site),其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/16012.html
0
随机主题
真要走了? 贾勒特-阿伦已取关骑士官方INS 此前传出交易流言0-3! 奥预赛黑马惨败, NO.2被横扫, 亚洲首败, 史诗级决胜局诞生薛思佳: 上海男篮已经重新集结 开始备战新赛季《法外枭雄: 滚石城》Steam版6月18日发售英伟达概念盘初活跃, 卓朗科技涨停重庆渝中区: 南纪门街道创新服务模式 “三快三及时”让“民呼我为”有精度更有温度独行侠西决开门红!东欧组合轰下63分,唐斯低迷,爱德华兹准三双几千块钱的练手代步车吉利全球鹰,可惜好多人不会开手动挡了她是尼姑, 生了一个儿子, 儿子当了主席美西方抢钱, 俄斗到底, 反制裁开始, 普京没收德最大银行在俄资产深圳坪山携手复旦大学 推动集成电路与半导体产业创新发展建明中国总裁: 继续深耕中国市场 推进增资扩产创新新材: 5月22日召开业绩说明会, 投资者参与他是公安部第三任部长, 59岁自杀, 两位公安部副部长受牵连被审查吉林东北虎官宣钟诚成为新主教练〔期待老铁新风暴〕印度美女远嫁中国, 弟弟前来中国祝贺, 直言: 中国人真是尖酸刻薄新车公关传播效果4月榜: 新普拉多在一片倒彩中继续割韭菜?广东男篮出局后三大难题向佐回应参加披荆斩棘,称帮郭碧婷一起赚奶粉钱#向佐别急,到跳水大赛赛点了美国涨新能源车关税因为拆了海鸥?中国新能源车崛起老美挡不住
最新回复(0)