Как отправить сообщение на служебную шину Azure и событие на шину концентратора событий из одной функции Azure в NodeJS?

У меня есть лазурная функция, которая делает HTTP-почтовый запрос на основе обещаний и получает ответ; теперь я хочу отправить этот ответ на служебную шину и в другой концентратор событий (функция 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. Это включается, если вы копируете строку подключения при просмотре определенной темы или очереди как в отличие от копирования из основного блейда служебной шины.

Конечная точка = sb: // {servicebus-name} .servicebus.windows.net /; SharedAccessKeyName = test-queue-sender; SharedAccessKey = {SharedAccessKey} =; EntityPath = test-queue;

vs

Конечная точка = 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