【问题标题】:Can an ESB manipulate the response?ESB 可以操纵响应吗?
【发布时间】:2015-01-22 12:15:49
【问题描述】:

如果我有这样的结构:

request --> ESB --> Service_1
                --> Service_2

对 service1 和 2 的调用是并行的。 ESB 是否能够:

  1. 等到两个响应都返回?
  2. 操纵响应,例如两个服务都返回一个整数,例如 2 和 8。ESB 计算平均值 - 5 并将其发送回用户?

【问题讨论】:

    标签: web-services wso2esb soa esb


    【解决方案1】:

    答案是肯定的,您可以采用多种 SOA 设计模式。这些模式中的一些可能不适合您的用例,因为您的描述在细节上有些稀疏。然而,基于这里的概念设计,我想到了一些模式:

    1. 动态路由器 EIP:此模式将允许您动态计算一个或多个端点以将消息发送到。通常,端点是按顺序调用的,即一次调用一个,因此通常没有并行处理。
    2. 多播 EIP:这里有一个静态的端点列表,您将调用它们。然后消息要么一次发送一个,要么并行发送(取决于实现的软件)。不过,收件人列表是静态的。
    3. 收件人列表:与多播非常相似,此 EIP 允许您动态计算端点的收件人列表,然后并行发送或一次发送一个(取决于实现)。

    等待两个响应返回通常称为您的聚合策略。此策略将指定当一个端点发生故障等时要做什么。例如,向端点 A 和 B 都发送一条消息,超时时间均为 30 秒。如果一次超时,则返回错误或返回部分响应。

    关于操纵响应,这也是 ESB 的典型用途。有 EIP 模式,例如消息翻译器和内容丰富器。再一次,这些可能是也可能不是您正在寻找的东西。

    在设计刚才描述的服务时要记住的重要一点是将 ESB 上的服务抽象到客户端发出的请求没有服务的程度!和 service_2 具体在其中。让我用一个例子来说明这一点。

    假设我们有以下场景,您正在托管酒店预订服务。用户每次使用此服务时,您都希望用一定数量的积分奖励用户(奖励计划)。为简单起见,您将在 ESB 上将两种服务(酒店预订服务和奖励服务)合并为一项服务。

    使用酒店预订服务的要求如下:

    • 客人全名
    • 到达日期
    • 出发日期
    • 房间号
    • 预订服务用户名和密码(即授权调用预订服务的 ESB 服务用户)。

    使用奖励服务的要求是:

    • 注册奖励系统用户名。

    您不能期望或希望向用户提供您的预订服务用户名和密码。因此,您不会在 ESB 上公开该字段。此外,如果您在 ESB 上公开该字段并且预订服务更改为一次性授权代码,那么您在 ESB 上的服务将不得不更改。

    如果你只暴露: - 客人全名 - 到达日期 - 出发日期 - 房间号 - 注册奖励系统用户名。

    此服务仅公开预订所需的元素,因此用户与您的后端更改隔离。永远记住这一点。尽可能保护您的服务消费者免受服务提供商的技术细节的影响。因此,如果您收到此类请求,您将在 ESB 上丰富向您的提供者发送的消息,等待聚合完成并发送响应。

    如果您的供应商发生变化,影响是微乎其微的。当您在 SOA 中正确理解这些概念时,您就可以在获得收益的道路上顺利进行。

    【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多