内部跨服务通信 - 订阅还是其他?

internal cross service communication - subscription or other?

我有一个架构问题,很想听听您的经验。 在微服务环境中。当 2 个 graphql API 微服务需要通过某种发布-订阅机制相互异步通信时。你会选择 graphql 订阅吗?或类似 kafka/rabitmq/etc 类型的系统。 有什么我应该遵循的架构规则吗?这种决定有什么标准吗? 感谢您的评论!

GraphQL 不一定是服务间通信的选择,但这不是 GraphQL 的设计和优化目的。特别是对于 pub-sub,Kafka 和 RabbitMQ 都是流行的选择。 GraphQL 订阅理论上可以通过 Kafka 等队列实现,但与仅使用 Kafka 相比,这会增加一些复杂性。 GraphQL 规范并没有说明应该如何实现订阅,而且开源支持远不如查询和变更完整。

订阅服务订阅的优点:

  • GraphQL 为您提供了一个工具来指定消息的形状(这可能 也可以使用 Avro 或 Protobufs 等模式来完成。
  • GraphQL 订阅允许订阅者自定义负载 他们收到

缺点:

  • 与直接使用 Kafka 客户端相比,它增加了系统的复杂性
  • 您将需要更多的工程周期

需要考虑的一些问题:

  • 与使用现成的代码相比,您想花多少时间创建自己的解决方案?
  • 您将从 GraphQL 的哪些方面受益?