IIB - Proper/Standard 为不同环境设置 HTTP 请求基础的方法 URL

IIB - Proper/Standard Way To Set HTTP Request Base URL For Different Environments

我们正在尝试使用 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设置能力...可惜我们暂时没有那个奢侈。

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

您可以使用 java 计算节点或使用映射节点和自定义 java.

从可配置服务中读取和设置 URL

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

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

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