You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.5 KiB

微服务通信方案

1. 微服务通信方案解读

  • 早期-第一种方案: 微服务通信方案: RPC
  • RPC 实现微服务通信的核心思想
    • 全局注册表: 将 RPC 支持的所有方法都注册进去
    • 通过将 java 对象进行编码(IDL, json, xml 等) + 方法名传递(TCP/IP 协议)到目标服务器实现微服务通信

  • RPC 的优缺点
    • 目前市面上最流行的 RPC 框架有:gRPC、Thrift、Dubbo, 有较多的选择性
    • 速度快、并发性能高 - (使用TCP作为传输协议)
    • 实现复杂(相对 Rest 而言), 需要做的工作与维护上更多(例如:Server 的地址一般存储于 Zookeeper 上, 就需要引入和维护 ZK)
    • Tip: 优缺点是相对的, 不需要拘泥于理论

  • 第二种方案: 微服务通信方案: HTTP(Rest)
    • 标准化的 HTTP 协议(GET、POST、PUT、DELETE 等), 前主流的微服务框架通信实现都是 HTTP
    • 简单、标准,需要做的工作和维护工作少;几乎不需要做额外的工作即可与其他的微服务集成

  • 第三种方案: 微服务通信方案: Message
    • 通过 Kafka、RocketMQ 等消息队列实现消息的发布与订阅(消费)
    • 可以实现"削峰填谷",缓冲机制实现数据、任务处理
    • 最大的缺点是只能够做到最终一致性,而不能做到实时一致性;当然,这也是看业务需求

  • 微服务通信该做何选择
    • 结合微服务框架与业务的需要做出选择
      • SpringCloud 建议的通信方案是 OpenFeign(Rest)
      • 需要最终一致性且不要求快速响应的业务场景可以选择使用 Message(异步处理对系统性能有很大的提升)
      • 问题来了: SpringCloud 可不可以使用 RPC 呢?(但是,要有足够强的理由说明你为什么要使用 RPC)

2. 使用 RestTemplate 实现微服务通信

  • 使用 RestTemplate 的两种方式(思想)
    • 在代码(或配置文件中)写死IP 和 端口号(需要知道,这并不是不可行!)
    • 通过注册中心(推荐Nacos)获取服务地址,可以实现负载均衡的效果

OpenFeign 核心源码解析

OpenFeign 应用技巧

  • 认识 FeignClientsConfiguration
    • 修改 Feign 的默认配置
    • 自定义 @FeignClient configuration

OpenFeign 二次改造

  • 认识 MicrometerCapability
    • 基于 Capability 的扩展机制

OpenFeign 造轮子

  • 手动创建 FeignClient

OpenFeign 面试题深度解析

  • Feign 和 OpenFeign 的区别

  • OpenFeign 的运行原理

  • FeignClient 配置方式