从 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。
祝你的解决方案好运。
我的消息流看起来像:
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。
祝你的解决方案好运。