我的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
或
还有其他解决方法吗?
答案 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。
祝您好运。