0

我的 msgflow 看起来像:

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

我将 DEV 的 override.properties 设置为:

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

以及另外 2 个用于 TEST 和 PROD 的 override.properties 文件:

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

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

但我想动态传递 URL,例如https://myDevUrl.com/id/123,其中 123 是 id,我收到了请求。

我知道我可以使用:

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

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

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

所以我的问题是:

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

就像是:

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

或者

还有其他解决方法吗?

4

2 回答 2

3

查看可从 ESQL 访问的属性,您必须寻找解决方法。

在覆盖中定义用户定义的属性(UDP),如下所示:

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

像这样访问 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;
    ...
于 2019-01-25T22:07:18.397 回答
3

这是@Daniel Steinmann 答案的变体。您需要确定您的 Broker 命名约定和 Target 系统 URL 命名约定有多可靠和一致,以及它们是否可以通过算法进行处理

它们还需要足够稳定,这样您就不会遇到硬编码问题。是的,许多人认为硬编码是对良好编码实践的诅咒,但通过使用配置数据库添加另一个故障点会引入其自身的问题。在决定硬编码不会引入不必要的部署之前,我问的问题是,这种情况会在一年内发生变化。

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;
    ....

我会注意到,我工作过的大多数网站都会有一个配置数据库,如果你没有,那么很可能在不久的将来你会。自从 Callable Flow 节点出现以来,我就开始使用它们来拥有一个处理加载配置数据的 Callable Flow。

祝您的解决方案好运。

于 2019-01-28T04:08:00.133 回答