【发布时间】:2015-01-22 12:15:49
【问题描述】:
如果我有这样的结构:
request --> ESB --> Service_1
--> Service_2
对 service1 和 2 的调用是并行的。 ESB 是否能够:
- 等到两个响应都返回?
- 操纵响应,例如两个服务都返回一个整数,例如 2 和 8。ESB 计算平均值 - 5 并将其发送回用户?
【问题讨论】:
标签: web-services wso2esb soa esb
如果我有这样的结构:
request --> ESB --> Service_1
--> Service_2
对 service1 和 2 的调用是并行的。 ESB 是否能够:
【问题讨论】:
标签: web-services wso2esb soa esb
答案是肯定的,您可以采用多种 SOA 设计模式。这些模式中的一些可能不适合您的用例,因为您的描述在细节上有些稀疏。然而,基于这里的概念设计,我想到了一些模式:
等待两个响应返回通常称为您的聚合策略。此策略将指定当一个端点发生故障等时要做什么。例如,向端点 A 和 B 都发送一条消息,超时时间均为 30 秒。如果一次超时,则返回错误或返回部分响应。
关于操纵响应,这也是 ESB 的典型用途。有 EIP 模式,例如消息翻译器和内容丰富器。再一次,这些可能是也可能不是您正在寻找的东西。
在设计刚才描述的服务时要记住的重要一点是将 ESB 上的服务抽象到客户端发出的请求没有服务的程度!和 service_2 具体在其中。让我用一个例子来说明这一点。
假设我们有以下场景,您正在托管酒店预订服务。用户每次使用此服务时,您都希望用一定数量的积分奖励用户(奖励计划)。为简单起见,您将在 ESB 上将两种服务(酒店预订服务和奖励服务)合并为一项服务。
使用酒店预订服务的要求如下:
使用奖励服务的要求是:
您不能期望或希望向用户提供您的预订服务用户名和密码。因此,您不会在 ESB 上公开该字段。此外,如果您在 ESB 上公开该字段并且预订服务更改为一次性授权代码,那么您在 ESB 上的服务将不得不更改。
如果你只暴露: - 客人全名 - 到达日期 - 出发日期 - 房间号 - 注册奖励系统用户名。
此服务仅公开预订所需的元素,因此用户与您的后端更改隔离。永远记住这一点。尽可能保护您的服务消费者免受服务提供商的技术细节的影响。因此,如果您收到此类请求,您将在 ESB 上丰富向您的提供者发送的消息,等待聚合完成并发送响应。
如果您的供应商发生变化,影响是微乎其微的。当您在 SOA 中正确理解这些概念时,您就可以在获得收益的道路上顺利进行。
【讨论】: