Получить URL с узла HTTP-запроса - PullRequest
0 голосов
/ 25 января 2019

Мой msgflow выглядит так:

MQinput -> Вычислить узел -> HTTP-запрос

У меня есть переопределение.properties для DEV установлен в:

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

и еще 2 файла override.properties для TEST и PROD:

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

и

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

, но я хочупередавать URL-адреса динамически, например https://myDevUrl.com/id/123,, где 123 - это идентификатор, который я получаю в запросе.

Я знаю, что могу использовать:

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

, но для этой команды я не наденуНе знаю, если этот URL для DEV, TEST или PROD.

Я могу решить эту проблему, вставив URL для DEV / TEST / PROD в БД, но я ищу более простой способ.

Итак, мой вопрос:

Я могу получить URL-адрес от узла HTTP-запроса (который установлен в override.properties)

Что-то вроде:

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

или

Есть ли другой обходной путь?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это вариант ответа @Daniel Steinmann. Вам необходимо решить, насколько надежны и согласованы ваши соглашения об именах Брокера и соглашения об именах 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, который обрабатывает загрузку данных конфигурации.

Удачи в вашем решении.

0 голосов
/ 26 января 2019

Глядя на свойства , доступные из 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;
    ...
...