如何从NodeJS中的单个azure函数向azure服务总线和事件发送消息到事件中心总线?

Abe*_*Abe 4 httpresponse node.js azureservicebus azure-eventhub azure-functions

我有一个 azure 函数,它发出一个基于 Promise 的 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);
    }

};

Run Code Online (Sandbox Code Playgroud)

预期输出:成功执行;可在服务总线和事件中心接收的数据。实际输出:Error: NamespaceConnectionString should not contain EntityPath.

Sam*_*ucy 6

正如错误消息所说,您需要查看连接字符串并删除 EntityPath 变量。如果您在查看特定主题或队列时复制连接字符串而不是从主服务总线刀片复制连接字符串,则将包含此内容

Endpoint=sb://{servicebus-name}.servicebus.windows.net/;SharedAccessKeyName=test-queue-sender;SharedAccessKey={SharedAccessKey}=; 实体路径=测试队列

对比

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