从HTTP请求节点获取URL

时间:2019-01-25 12:49:55

标签: ibm-integration-bus extended-sql

我的msgflow看起来像:

MQinput -> 计算节点-> HTTP请求

我已将DEV的override.properties设置为:

MsgflowName#HTTP Request.URLSpecifier = https://myDevUrl.com/id

和另外两个用于TEST和PROD的override.properties文件:

MsgflowName#HTTP Request.URLSpecifier = https://myTestUrl.com/id

MsgflowName#HTTP Request.URLSpecifier = https://myProdUrl.com/id

但是我想动态地传递https://myDevUrl.com/id/123之类的URL,其中123是id,这是我的请求。

我知道我可以使用:

SET OutputLocalEnvironment.Destination.HTTP.RequestURL = https://myUrl.com/id/123

但是对于此命令,我不知道该URL是用于DEV,TEST还是PROD。

我可以通过将DEV / TEST / PROD的URL插入数据库来解决此问题,但我正在寻找更简单的方法。

所以我的问题是:

我有任何方法可以从HTTP Request节点(在override.properties中设置)获取URL。

类似的东西:

SET URL = OutputLocalEnvironment.Destination.HTTP.RequestURL;  -- was not worked 

还有其他解决方法吗?

2 个答案:

答案 0 :(得分:3)

看看properties that are accessible from ESQL,您必须寻求解决方法。

在这样的替代项中定义User-Defined Property(UDP):

MsgflowName#TheURL = https://myDevUrl.com/id

Access the UDP像这样:

CREATE COMPUTE MODULE YourModule
  DECLARE TheURL EXTERNAL CHARACTER '';

  CREATE FUNCTION Main() RETURNS BOOLEAN
  BEGIN
    DECLARE idFromRequest CHARACTER ...;
    DECLARE url CHARACTER TheURL || '/' || idFromRequest;
    SET OutputLocalEnvironment.Destination.HTTP.RequestURL = url;
    ...

答案 1 :(得分:3)

这是@Daniel Steinmann的答案的变体。您需要确定您的Broker命名约定和Target系统URL命名约定的牢固程度和一致性,以及是否可以采用 算法

它们还必须足够稳定,以免硬编码问题。是的,许多人认为硬编码是良好编码实践的反面,但是通过使用config DB添加另一个故障点会引入其自身的问题。在决定硬编码不会引入不必要的部署之前,我要问的问题是一年后会发生这种变化。

CREATE COMPUTE MODULE ComputeNode
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
    DECLARE UrlPattern CHAR 'https://target-XX/resource/';
    IF CONTAINS(BrokerName, 'DEV') THEN
        SET UrlPattern = REPLACE(UrlPattern, 'XX', 'dev');
    ELSEIF CONTAINS(BrokerName, 'TST') THEN
        SET UrlPattern = REPLACE(UrlPattern, 'XX', 'test');
    ELSEIF CONTAINS(BrokerName, 'PRD') THEN
        SET UrlPattern = REPLACE(UrlPattern, 'XX', '');
    END IF;

    SET OutputLocalEnvironment.Destination.HTTP.RequestURL =
        UrlPattern || InputRoot.JSON.Data.Aggregate.PrimaryKeyField;
    ....

我要指出的是,我工作过的大多数站点都将有一个Config DB,如果您没有,那很可能在不久的将来。自从Callable Flow节点诞生以来,我就开始使用它们来拥有一个可处理配置数据加载的Callable Flow。

祝您好运。