【发布时间】:2021-11-23 17:51:49
【问题描述】:
我想开发一个微服务结构的项目。 我必须使用 php/laravel 和 nodejs/nestjs 我的微服务之间的最佳连接方法是什么。我读到了 RabbitMQ 和 NATS 消息传递 还有GRPC 哪个选项更适合微服务? 为什么? 提前致谢
【问题讨论】:
标签: rabbitmq microservices grpc messagebroker nats.io
我想开发一个微服务结构的项目。 我必须使用 php/laravel 和 nodejs/nestjs 我的微服务之间的最佳连接方法是什么。我读到了 RabbitMQ 和 NATS 消息传递 还有GRPC 哪个选项更适合微服务? 为什么? 提前致谢
【问题讨论】:
标签: rabbitmq microservices grpc messagebroker nats.io
这些技术满足不同的需求。
gRPC 是一种机制,客户端通过该机制调用远程(尽管它们不一定是)服务器上的方法。客户端与实现这些方法的服务器紧密耦合(通常通过负载平衡器)。
例如我(客户)打电话给星巴克(服务)并订购(方法)一杯咖啡。
gRPC 是 REST、GraphQL 和其他用于通过某种形式的 API 将客户端与服务器连接起来的机制的替代方案。
消息代理(例如 NATS、Rabbit)提供更高级别的抽象,其中客户端将消息发送到称为代理的中间服务(这可以使用 gRPC 完成),并且代理可以将消息排队并直接发送到服务(推送)或等待服务检查其订阅(拉取)。
例如我(客户)在某个网站(经纪人)上发布了分类广告。多个人可能会看到我的广告(订阅者)并提议从我这里购买(方法)商品。一些软件机器人也可能订阅并联系我提供运输或保险我正在销售的东西。其他人可能正在监控网站上小部件的销售情况,以确定是否有开设商店销售这些小部件等的市场。
使用代理,客户端可能永远不知道哪些服务器实现了该功能(反之亦然)。这是一种松耦合机制,可以独立于客户端添加和删除服务。
【讨论】:
如果您需要 1:1 服务调用响应,请使用 gRPC
如果您不关心哪个服务会接收非耦合消息,请使用 rabbitMQ
如果您需要分布式系统来保存事件历史并稍后在另一个服务上重用,请使用 kafka
【讨论】: