我正在创建一个具有微服务体系结构的项目。我创造了两个微型服务。
其中一个是产品实体,另一个是票据实体。它们有自己的端点,并且与网关连接在一起(我使用的是jhipster微服务体系结构)。
该法案我在想如何在这两位小姐之间交流。我脑子里有三种方法:
如果你有其他的方法,我很感谢你能和我分享。
编辑
发布于 2016-04-18 18:22:30
我不确定我要回答的是不是正确的方法。我还在学习自己..。但是我可以告诉你我是如何实现我的微服务尝试的。
首先,我从基于HTTP通信的微服务使用这个博客开始。这很好,但问题是,您在服务之间创建了依赖关系。服务A需要知道服务B,并且需要直接调用它(当然是通过服务发现等)。这是您在开发微服务时通常要避免的情况。
我最近开始使用的另一种方法是使用message bus。实际上,这是你在问题中提到的第三个选择。
我有一个服务A,它存储人员(只是一个例子)。服务在创建新用户时所做的事情是:它在RabbitMQ总线:personCreatedEvent上发送一个personCreatedEvent。如果有任何其他服务对这样的事件感兴趣,它们可以归为它们。这些感兴趣的服务将它们感兴趣的相关信息保存在自己的数据存储中。
使用最后一种方法,您的服务之间并不存在真正的依赖关系,因为它们之间不直接通信。服务A不知道服务B,因为B只向对这些事件感兴趣的服务发送事件到RabbitMQ,反之亦然。
当然,您在服务上的数据存储之间有重复。但是这也是有利可图的,例如服务B不需要使用与服务A相同的模式或数据存储机制。它只以对该服务最好的方式存储相关信息。
发布于 2016-05-10 06:37:26
您看过http://stytex.de/blog/2016/03/25/jhipster3-microservice-tutorial/第2部分:服务间通信部分吗?它将向您介绍如何实现这一目标的具体示例。
发布于 2016-05-18 03:44:12
让我尝试在这个场景中添加一些更多的细节,以强调在上下文中哪些可能被限定为事件,哪些可能没有资格。只有在下订单的情况下,计费-Ms才需要与Product对话。下订单主要是为了一个单独的MS,比如说订单。当订单创建或下单时,它将包含产品的信息,作为行项目。
订单的创建可以被看作是一个事件。当发生订单创建事件时,可以将其推送到计费服务的队列中。在RabbitMQ中,队列应该作为工作队列来实现.这样,计费-MS的多个实例可以订阅相同的队列,但它将由一个和唯一一个工作人员处理。在将服务注册为RabbitMQ工作人员时,丝带不起任何作用。每个实例注册到一个队列中,RabbitMQ决定RoundRobin哪个计费服务实例可以处理此事件。
获得产品的详细信息,在一个订单的收费-Ms应该是一个服务-服务调用负载平衡通过丝带(如果这是你正在使用的)。获取产品详细信息并不是一个真正的事件,下订单就是这样,因此区别就在于此。
此外,网关应用于公开边缘服务。对于服务到服务的呼叫,跳过网关服务并不理想.
https://stackoverflow.com/questions/36701111
复制相似问题