例如,一旦用户进入我们工作流程中的付款步骤,就需要调用许多不同的服务(例如付款,电子邮件生成,内容生成)。前端是否应设计或应该设计服务以处理此类请求?如果是这样,该如何设计该服务,以便它可以处理复合请求而无需特别硬编码这些请求的组成?
答案 0 :(得分:2)
我认为微服务必须使用队列才能与其他人通信。
前端可以生成调用,但后端必须保存逻辑,以便在执行操作后需要通知哪些队列。
我认为RabbitMq是这类设计的绝佳工具。例如:
因此,此流程可以让您一次更新多个阶段而不会阻止代码,还允许在后端服务器之间分配负载。
答案 1 :(得分:1)
您正在寻找与BPEL一致的内容来抽象您的业务逻辑。除非你明确需要将其外化,否则我强烈建议你不要。测试起来要困难得多,并且会给您的服务带来很大的复杂性。
话虽这么说,您可能希望用外观包装其他服务,这样您就不会受到呼叫细节的影响。这使您的逻辑可以测试,并允许这些服务实现独立于应用程序的其余部分进行更改。
答案 2 :(得分:1)
这实际上取决于你所指的是什么。
复合用户界面
在用户界面中,您应该构建一个复合ui。 (微)服务应该负责垂直层而不是水平层。例如,业务层或数据层应该由财务,销售等垂直层替换,在这些层中,您可以构建更小的组件。这些组件在技术上负责从存储到用户界面的业务问题。我主要使用像AngularJS这样的框架,其中一部分UI请求一些数据,各种服务可以添加到数据中。例如,亚马逊推荐书籍列表。您从映射到单个product-id的url开始。您可以从ServiceA检索书籍信息,从ServiceB购买价格,从ServiceC购买运费,从ServiceD获得折扣等。还有推荐书籍列表。该列表包含ServiceB中的几个产品ID(例如),这些产品会再次向ServiceA发送书籍信息请求,例如名称和信息。图片网址。
现在发票可以是相同的,也可以是电子邮件。创建它就像它是一个复合ui。
<强>集成强>
如果要检索数据以便能够与外部系统通信,例如,没有用户界面。它不属于财务或销售或其他任何东西。如果愿意,创建一个新的边界,一个有界的上下文,例如IT / Ops。例如,它的责任是与第三方整合。它拥有这个问题。
然后可以定义几个接口,例如IProvideBookInformation
和IProvideBookPrice
。 IProvideBookInformation
可以使用BookInfo ProvideBook(Guid id)
之类的方法,其中BookInfo
是也属于此IT / Ops服务的DTO。
然后Sales
和Finance
负责实现此接口。所以他们依赖于这个界面。然后以您喜欢的方式进行部署,例如,在.NET世界中,您可以使用NuGet。然后,在部署此IT / Ops服务时,您还可以从实现这些接口的其他服务部署组件。这就像复合UI示例,其中部署了一个网站,其中包含几个为用户界面提供数据的其他组件。但现在它是一个后端集成服务,而不是具有用户界面的东西。 IT / Ops服务与实现没有直接的依赖关系。但是当它需要服务的实现时,它会加载它可以找到的所有组件并搜索其所需接口的实现。一旦找到实现,它就会执行它并获取数据。组件可能直接进入数据库,这很简单,我们都很简单。但它也可能通过一些REST api或您最喜欢的任何方式请求数据。它以这种方式收集所有数据,通过它所有者的接口,但由其他服务提供的实现。收集完所有数据后,它会呼叫第三方并做任何应该做的事情。