【问题标题】:IIB - Proper/Standard Way To Set HTTP Request Base URL For Different EnvironmentsIIB - 为不同环境设置 HTTP 请求基本 URL 的正确/标准方法
【发布时间】:2017-01-25 02:04:10
【问题描述】:

我们正在尝试使用 SOA 实现我们的产品,目前使用 IBM Integration Bus v9 作为我们的 ESB。

我们有 3 个不同的环境(用于不同目的的服务器集)部署我们的产品:

  • 开发:在测试和开发过程中使用
  • 客户测试: 更稳定的构建,以供客户批准,然后再发布主版本
  • 主要/生产:这是最后一件事。

我们遇到的挑战:为不同环境的消息流的HTTP节点设置Base URL;在不损害 DRY 原则的情况下!

似乎只能使用 mqsiapplybaroverride 命令在 HTTP 请求节点中一次设置整个 URL。问题是可以从单个服务器公开多个资源,因此有一个共同的基本 URL。

使用 UDP 似乎是一种很有前途的方法。我们可以在 UDP 中为我们的每个服务设置基本 URL,并在使用 UDP 的 HTTP 请求节点之前的计算节点中构建 HTTP 请求 URL。然后可以用 mqsiapplybaroverride 覆盖 UDP... 问题?似乎 UDP 的范围不超过一个消息流......所以每当我想从服务器调用资源时,我必须为该消息流定义一个 UDP,否则 BAR 覆盖不会影响该消息流的基本 URL...这将导致在每个消息流中重复基本 URL...DRY 适用。

这应该是典型 SOA 应用程序中的常见问题......那么有没有更好的方法来解决它?典型的 Java EE 容器中是否有类似 JNDI 的特性?

IIB v10.0.0.6 似乎引入了一个 RestRequest 节点,它提供了 Base URL 设置能力......不幸的是,我们暂时没有这种奢侈。

【问题讨论】:

  • DRY 很好,但在某些情况下,我认为明确设置参数会更好,而且我认为在这种情况下,为每个 HTTP 节点设置整个 URL 会更简洁。通过从代码中设置 URL,您只会引入可能的错误,并且通常会使简单的配置变得复杂。
  • 不同的环境呢?编辑每个环境的所有请求 URL?...听起来不是很有趣!

标签: soa esb


【解决方案1】:

一个好的解决方案是为每个环境在数据库中设置baseUrl,并设置如下值:

SET OutputLocalEnvironment.Destination.REST.Request.BaseURL = GetCachedOrFromDB('custom_service_baseUrl');

GetCachedOrFromDB -> 定义从缓存或数据库中获取值的函数(如果不在缓存中) 'custom_service_baseUrl' -> 将属性定义为每个环境的设置表中的键。

【讨论】:

    【解决方案2】:

    您可以使用用户定义的可配置服务来实现这一点。

    您可以使用 java 计算节点或使用映射节点和自定义 java 从可配置服务读取和设置 URL。

    【讨论】:

    • 谢谢,我去看看这个
    猜你喜欢
    • 2016-04-03
    • 2021-10-07
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多