首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个微服务之间的通信

两个微服务之间的通信
EN

Stack Overflow用户
提问于 2016-04-18 17:58:51
回答 5查看 26.7K关注 0票数 50

我正在创建一个具有微服务体系结构的项目。我创造了两个微型服务。

其中一个是产品实体,另一个是票据实体。它们有自己的端点,并且与网关连接在一起(我使用的是jhipster微服务体系结构)。

该法案我在想如何在这两位小姐之间交流。我脑子里有三种方法:

  1. 从bill发送一个请求到类似队列的rabbitMQ,以便从产品-ms获得这些ids (我不知道这是什么瓶颈)
  2. 向网关发送产品服务请求,并从那里获取产品(由于它们之间的数据大小,我担心延迟,这样我就不会直接接触数据库,所以我总是依赖于网关)
  3. 我可以在bill-ms中复制存储库、服务和实体(这是一种丑陋的方式,我认为它违反了ms-架构的规则,维护非常困难)。

如果你有其他的方法,我很感谢你能和我分享。

编辑

  1. 现在我知道了瓶颈是什么:假设有3个bill实例,rabbitMQ是如何决定响应哪个实例的?或者,我应该如何说“给我免费的账单实例-ms来订阅来自rabbitMQ的请求”来实现负载平衡。
EN

Stack Overflow用户

发布于 2016-04-18 18:22:30

我不确定我要回答的是不是正确的方法。我还在学习自己..。但是我可以告诉你我是如何实现我的微服务尝试的。

首先,我从基于HTTP通信的微服务使用这个博客开始。这很好,但问题是,您在服务之间创建了依赖关系。服务A需要知道服务B,并且需要直接调用它(当然是通过服务发现等)。这是您在开发微服务时通常要避免的情况。

我最近开始使用的另一种方法是使用message bus。实际上,这是你在问题中提到的第三个选择。

我有一个服务A,它存储人员(只是一个例子)。服务在创建新用户时所做的事情是:它在RabbitMQ总线:personCreatedEvent上发送一个personCreatedEvent。如果有任何其他服务对这样的事件感兴趣,它们可以归为它们。这些感兴趣的服务将它们感兴趣的相关信息保存在自己的数据存储中。

使用最后一种方法,您的服务之间并不存在真正的依赖关系,因为它们之间不直接通信。服务A不知道服务B,因为B只向对这些事件感兴趣的服务发送事件到RabbitMQ,反之亦然。

当然,您在服务上的数据存储之间有重复。但是这也是有利可图的,例如服务B不需要使用与服务A相同的模式或数据存储机制。它只以对该服务最好的方式存储相关信息。

票数 44
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36701111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档