2016-06-16 27 views
1

例如,一旦用户到达我们工作流中的付款步骤,需要调用许多不同的服务(例如付款,电子邮件生成,内容生成)。前端是否应该或应该设计一个服务来处理这种类型的请求?如果是这样,该服务应该如何设计,以便它可以处理复合请求,而不用特别硬编码这些请求的组成部分?在微服务体系结构中,您如何处理必须进行次要数据处理和调用其他服务的复合请求?

回答

1

您正在寻找的东西沿线BPEL来抽象您的业务逻辑。除非您明确需要将此外部化,否则我强烈建议您不要。测试更加困难,并且增加了服务的复杂性。

这就是说,你可能想要将你的其他服务与外观包装起来,这样你就可以与呼叫细节隔离了。这允许您的逻辑是可测试的,并允许这些服务实现独立于应用程序的其余部分进行更改。

1

这真的取决于你指的是什么。

复合UI

在用户界面中,你应该建立一个复合的UI。 (微)服务应该负责垂直层面,而不是水平层面。例如,业务层或数据层应该被金融,销售等垂直行业所取代,在这些行业中,您可以构建更小的组件。这些组件在技术上负责从存储到用户界面的业务问题。我主要使用AngularJS这样的框架,其中一部分UI需要一些数据,各种服务可以添加到数据中。例如亚马逊推荐的书籍列表。您从映射到单个产品ID的url开始。您从ServiceA获取书籍信息,ServiceB的价格,ServiceC的运输成本,ServiceD的折扣等。还有一些推荐书籍的列表。该列表包含来自ServiceB的多个产品ID(例如),并且这些产品会再次向ServiceA发送多个请求以获取图书信息,如名称&图像网址。

现在发票可以是相同的,也可以是电子邮件。创建它就好像它是一个复合UI。

集成

当你想要检索的数据能够传送到外部系统,例如,没有用户界面。它不属于财务或销售或任何其他。例如,创建一个新的边界,如果您愿意,则称为IT/Ops。例如,它的责任是与第三方整合。它拥有这个问题。

然后它可以定义几个接口,如IProvideBookInformationIProvideBookPriceIProvideBookInformation可以有一个像BookInfo ProvideBook(Guid id)这样的方法,其中BookInfo是DTO,它也属于此IT/Ops服务。

然后SalesFinance负责实现这个接口。所以他们依赖于这个接口。然后以任何你喜欢的方式部署,例如在.NET世界中你可以使用NuGet。然后,在部署此IT/Ops服务时,您还可以部署来自实现这些接口的其他服务的组件。这就像Composite UI示例,其中一个网站部署了多个其他组件,为用户界面提供数据。但现在它是后端集成服务,而不是具有用户界面的东西。 IT/Ops服务对实施没有直接的依赖关系。但是当它需要实现服务时,它会加载它可以找到的所有组件,并搜索其所需接口的实现。一旦找到实现,它就会执行它并获取数据。组件可能直接进入数据库,这很简单,我们都很喜欢简单。但它也可能通过某些REST API或任何您最喜欢的方式请求数据。它以这种方式收集所有数据,通过它所拥有的接口,但是由其他服务提供的实现。一旦收集完所有数据后,它会向第三方发出呼叫,并执行任何应有的操作。

1

我认为微服务必须使用队列来与其他人进行通信。

前端可以生成调用,但后端必须保存一个操作发生后需要通知队列的逻辑。

我认为RabbitMq是这些类型的设计的一个很好的工具。例如:在结帐

  • 用户通阶段1
    • 发送 - 用户标识,电子邮件到emailqueue_standby队列
    • 发送 - 用户ID,项emailcontent_standby队列
    • 发送 - 用户标识,paymentdata到paymentchecking队列
  • 用户在结帐时完成第2阶段
    • 消耗味精从emailqueue_standby队列 - >激活发送电子邮件
    • 消耗味精从paymentchecking Queue代码 - >激活代码检查付款数据 - >发表回复approve_payment_data - >值USER_ID,DEAL_ID
    • 消耗从approve_payment_data味精队列 - >如果用户支付被批准继续,否则回到停止阶段1

所以这个流程可以让您一次更新多级无码阻塞,也允许分配之间的负载后端服务器。