我们正在尝试使用SOA实现我们的产品,并且目前正在使用IBM Integration Bus v9作为我们的ESB。
我们在3个不同的环境(用于不同目的的服务器集)上部署了我们的产品:
我们遇到的挑战:为不同的环境设置消息流的HTTP节点的基本URL;不妥协DRY原则!
似乎只能使用 mqsiapplybaroverride 命令在HTTP Request节点中一次设置整个URL。问题是可以从单个服务器公开多个资源,因此具有公共基本URL。
使用 UDP 似乎是一种很有前景的方法。我们可以在UDP中为每个服务设置基本URL,并在使用UDP的HTTP Request节点之前的计算节点中构建HTTP请求URL。那么UDP可以用 mqsiapplybaroverride 覆盖...问题?似乎UDP不具有多个消息流的范围......因此,无论何时我想从服务器调用资源,我都必须为该消息流定义UDP或者BAR覆盖赢得&#39 ; t影响该消息流的基本URL ...这将导致在每个消息流中重复基本URL ... DRY适用。
这应该是典型SOA应用程序中的常见问题......那么有没有更好的方法来解决它?在典型的Java EE容器中有类似JNDI的功能吗?
IIB v10.0.0.6似乎引入了一个RestRequest节点,该节点提供了基本URL设置功能......不幸的是,我们暂时没有这种奢侈品。
答案 0 :(得分:2)
您可以使用用户定义的可配置服务来实现此目的。
您可以使用java计算节点或使用映射节点和自定义java从可配置服务中读取和设置URL。
答案 1 :(得分:0)
一个好的解决方案是在数据库中为每个环境设置 baseUrl 并设置如下值:
SET OutputLocalEnvironment.Destination.REST.Request.BaseURL = GetCachedOrFromDB('custom_service_baseUrl');
GetCachedOrFromDB -> 定义从缓存或数据库中获取值的函数(如果不在缓存中) 'custom_service_baseUrl' -> 将属性定义为每个环境的设置表中的键。