CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
多语言后端入门/课时/与 Java 互操作
RawBlame
课时目录12 节

多语言后端入门

  1. 01多语言后端概览
  2. 02Go 入门
  3. 03Rust 入门
  4. 04C# 入门
  5. 05Ruby 入门
  6. 06语言对比
  7. 07并发模型
  8. 08包管理与工具链
  9. 09与 Java 互操作
  10. 10如何选择语言
  11. 11多语言微服务
  12. 12综合练习

与 Java 互操作

JNI、gRPC 跨语言;微服务分工。

25 分钟

与 Java 互操作

Polyglot 不是「一个 repo 里混写五种 main」,而是 边界清晰的多进程协作。Java 服务仍是 CodeRoadMap backend 与 spring-cloud-essentials 的主轴;Go/Rust/Python 等通过 HTTP、消息、gRPC、JNI/FFI 接入。本节讲 怎么连、连哪里、别踩坑。

学习目标

  • 区分进程间(微服务)与进程内(JNI/FFI)互操作
  • 理解 gRPC + Protobuf 作为跨语言契约的首选理由
  • 设计微服务语言边界时的职责划分

进程间:首选 HTTP 与 gRPC

方式优点缺点
REST + JSON人类可读、调试易schema 松散、性能一般
gRPC + Protobuf强类型、多语言 codegen、HTTP/2浏览器需 grpc-web 网关
消息队列解耦、削峰最终一致、运维复杂

本站 grpc-essentials 从 grpc-proto 到 grpc-spring:一份 .proto,Java/Go/Python 各生成 stub。

service TrackService {
  rpc GetTrack(GetTrackRequest) returns (Track);
}

Java 侧 BindableService;Go 侧 grpc.Server;业务 DTO 不再手抄三套。

进程内:JNI 与 FFI(慎用)

  • JNI:Java 调 C/C++ 库;Rust 可通过 cdylib + JNI 暴露
  • Panama / FFM(Java 22+):替代部分 JNI 样板
  • 适用:加密、编解码、遗留 native SDK
  • 风险:崩溃在 native 层 拖垮整个 JVM;部署要配齐 .so/.dll

默认选微服务 + gRPC,除非延迟要求 μs 级且团队能维护 native。

与 Node、Python、PHP 的衔接

  • BFF:nodejs-essentials 聚合 Java API 给前端
  • AI/批处理:python-fundamentals 推理服务,Java 调 REST/gRPC
  • 遗留 CMS:php-essentials 只暴露 HTTP,Java 不直连 PHP 内存

微服务语言分工示例

┌─────────────┐     gRPC      ┌──────────────┐
│ Java 订单域  │ ◄──────────► │ Go 读模型/cache │
│ Spring Boot │               │  高 QPS 查询    │
└─────────────┘               └──────────────┘
       │ HTTP
       ▼
┌─────────────┐
│ Python 推荐  │  训练离线,在线 gRPC
└─────────────┘

同一聚合根不要拆两种语言写——事务与一致性会噩梦。

练习

  • 读 grpc-intro,写 REST vs gRPC 选型三句
  • 画一张你熟悉系统的语言边界图(哪怕只有 Java + 一种)
  • 查 JNI 官方文档目录,列出「何时不该用 JNI」两条

小结

跨语言靠契约(Proto/OpenAPI)与进程边界;JNI 是窄门,gRPC 是宽路。 下一课如何选择语言。

加载本节练习…
← 上一课包管理与工具链下一课 →如何选择语言