从 HTTP 请求节点获取 URL

Get URL from HTTP Request node

我的消息流看起来像:

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

我将 DEV 的 override.properties 设置为:

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

另外 2 个 override.properties 文件用于测试和生产:

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

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

但我想像 https://myDevUrl.com/id/123 一样动态传递 URLs,其中 123 是我在请求中获得的 ID。

我知道我可以使用:

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

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

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

所以我的问题是:

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

类似于:

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

还有其他解决方法吗?

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

这是@Daniel Steinmann 回答的变体。您需要确定 Broker 命名约定和 Target 系统 URL 命名约定的可靠性和一致性,以及它们是否可以 approached algorithmically.

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

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。

祝你的解决方案好运。