如果我有这样的结构:
request --> ESB --> Service_1
--> Service_2
对service1和2的调用是并行的。 ESB是否有能力:
答案 0 :(得分:1)
答案是肯定的,您可以使用多种SOA设计模式。某些这些模式可能不适合您的用例,因为您的描述在细节上有点稀疏。然而,基于概念设计,我想到了一些模式:
等待两个回复通常被称为聚合策略。此策略将指定当一个端点出现故障时要执行的操作等。例如,向端点A和B发送消息,并且超时为30秒。如果一次超出则返回错误或返回部分响应。
关于操纵响应,这也是ESB的典型用法。有EIP模式,如消息翻译和内容丰富。这些可能或者可能不是你想要的。
在设计像您刚刚描述的服务时要记住的一件重要事情是在ESB上抽象您的服务,以至于客户端发出的请求没有service_!和service_2具体在其中。让我用一个例子来澄清这一点。
假设我们有以下情况您正在主持酒店预订服务。每当用户使用此服务时,您希望以一定的积分奖励用户(奖励计划)。为简单起见,您将在ESB上将两项服务(酒店预订服务和奖励服务)合并为一项服务。
使用酒店预订服务的要求如下:
使用奖励服务的要求是:
您不能指望或想要向用户提供您的预订服务用户名和密码。因此,您不会在ESB上公开该字段。此外,如果您在ESB上公开该字段并且预订服务更改为一次授权代码,那么您在ESB上的服务将不得不改变。
如果你只暴露: - 访客全名 - 到达日期 - 出发日期 - 房间号 - 注册奖励系统用户名。
此服务仅公开预订所需的元素,因此用户与后端的更改隔离。始终牢记这一点。尽可能地保护您的服务使用者免受服务提供商的技术细节的影响。因此,如果您收到此类请求,您将在ESB上丰富上传到您的提供商的消息,等待聚合完成并发送响应。
如果您的供应商发生变化,影响微乎其微。当您在SOA中获得这些概念时,您就可以获得收益。