Как да изпратите съобщение до azure service bus & event to event hub bus от отделни azure функции в NodeJS?

Имам azure функция, която прави http post заявка, базирана на обещание, и получава отговор; сега искам да изпратя този отговор до сервизна шина и до различен център за събития (функцията Azure се задейства от различен център за събития).

функция казва, че е изпълнена успешно в случай на център за събития, но не се изпращат събития. В случай на сервизна шина получавам тази грешка NamespaceConnectionString should not contain EntityPath.

module.exports = async function (context, eventHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array ${eventHubMessages}`);

    var completeData = '';

    eventHubMessages.forEach((message, index) => {
        context.log(`Processed message ${message}`);
        completeData = message;
    });

    var output = '';

    const axios = require('axios');

    try {
        const response =  await axios.post('http://fake-endpoint', 
        {  data-json : completeData
        })
        context.log(`statusCode: ${response.statusCode}`);
        context.log(response.data);
        output += response.data;

        var time = new Date().toString(); 
        context.log('Event Hub message created at: ', time);
        context.bindings.outputEventHubMessage = out;
        context.bindings.outputSbMsg = out;
        context.done()
        return response.data; // or return a custom object using properties from response
    } catch (error) {
        // If the promise rejects, an error will be thrown and caught here
        context.done(error);
    }

};

Очакван резултат: успешно изпълнение; данни, налични в сервизната шина и центъра за събития за получаване. Действителен резултат: Error: NamespaceConnectionString should not contain EntityPath.


person Abe    schedule 29.04.2019    source източник
comment
Вашият низ за връзка има ли EntityPath? Ако е така, можете ли да опитате да го премахнете?   -  person George Chen    schedule 29.04.2019
comment
Низовете за свързване често се генерират динамично от ARM шаблони.   -  person SSH This    schedule 22.01.2020


Отговори (1)


Както се казва в съобщението за грешка, трябва да погледнете вашия низ за връзка и да премахнете променливата EntityPath. Това е включено, ако копирате низа за връзка, когато преглеждате конкретна тема или опашка като се противопоставя на копирането му от основния блейд на служебната шина.

Endpoint=sb://{servicebus-name}.servicebus.windows.net/;SharedAccessKeyName=test-queue-sender;SharedAccessKey={SharedAccessKey}=;EntityPath=test-queue;

vs

Endpoint=sb://{servicebus-name}.servicebus.windows.net/;SharedAccessKeyName=test-queue-sender;SharedAccessKey={SharedAccessKey};

person SamaraSoucy    schedule 30.04.2019
comment
Това има смисъл, благодаря за информацията. Проблемът е, че този низ за връзка често се генерира от ARM шаблон. Как може ARM шаблон да бъде модифициран, за да не предоставя EntityPath в низа за връзка? - person SSH This; 22.01.2020
comment
Бихте ли споделили малко за ARM шаблона, който използвате, и как го внедрявате, за да получите този низ за връзка? Може да има нещо за промяна в шаблона или може да е нещо, което трябва да представя на продуктовия екип. Ако не искате да го обсъждате в коментарите, тъй като не е по темата на въпроса, можете да ми изпратите имейл до azcommunity (at) microsoft.com и можем да го обсъдим по този начин. Не забравяйте да включите връзка към тази тема в имейла, за да може да бъде насочена към мен. - person SamaraSoucy; 22.01.2020
comment
Благодаря за отговора, всъщност успях да отрежа EntityPath с помощта на функции за работа с низове. "value": "[first(split(listkeys(variables('defaultAuthRuleResourceId'), variables('sbVersion')).primaryConnectionString, ';EntityPath='))]" Това се изискваше от тригера на моето функционално приложение, не харесваше EntityPath, който беше добавен. - person SSH This; 28.01.2020