You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Functions绑定Event Hub发送数据时门户执行超时报500错误

Azure Functions添加Event Hub输出绑定后门户执行超时500(Socket连接超时)

问题描述

Node.js Azure Functions应用中,HTTP Trigger函数原本运行正常。添加Event Hub输出绑定后出现以下异常情况:

  • 本地调试和已发布的应用均可正常向Event Hub发送数据
  • 在Azure门户中执行函数时,长时间无响应后返回500错误
  • Timer Trigger函数也出现相同超时问题

错误日志:

[Error] Executed 'Functions.myfunction' (Failed, Id=, Duration=131873ms)

诊断工具捕获的核心异常:

System.Net.Sockets.SocketException: Connection timed out

已尝试的无效操作

  • 遵循微软官方指南实现绑定
  • 添加await关键字、调整context.done()调用
  • 检查函数逻辑无语法错误

相关代码与配置

添加Event Hub前的正常HTTP Trigger代码

module.exports =  async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
try {
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
    ? "Hello, " + name + ". This HTTP triggered function executed successfully."
    : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";


    // Construct response
    const responseJSON = {
        "message": responseMessage,
        "success": true
    }

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseJSON,
        contentType: 'application/json'
    };
} catch(err) {
    context.res = {
        status: 500
    };
}
}

添加Event Hub后的代码

module.exports =  async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
try {
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
    ? "Hello, " + name + ". This HTTP triggered function executed successfully."
    : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";


    var timeStamp = new Date().toISOString();
    var message = 'Message created at: ' + timeStamp;

    context.bindings.outputEventHubMessage = [];

    context.bindings.outputEventHubMessage.push("1 " + message);
    context.bindings.outputEventHubMessage.push("2 " + message);
    // context.done();

    // Construct response
    const responseJSON = {
        "message": responseMessage,
        "success": true
    }

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseJSON,
        contentType: 'application/json'
    };
} catch(err) {
    context.res = {
        status: 500
    };
}
}

functions.json配置

{
      "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "eventHub",
      "direction": "out",
      "name": "outputEventHubMessage",
      "connection": "smaseventhubsend_EVENTHUBSETTING",
      "eventHubName": "smaseventhub"
    }
  ]
}

local.settings.json配置

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "smaseventhubsend_EVENTHUBSETTING": "Pathtoeventhub with key"
  }
}

完整异常栈

Full Exception : Exception while executing function /Functions.EventHubConnectionTest ---> System.Net.Sockets.SocketException  /Connection timed out    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    Microsoft.Azure.Amqp.AsyncResult.End[TAsyncResult](IAsyncResult result)    Microsoft.Azure.Amqp.Transport.AmqpTransportInitiator.<>c.<ConnectAsync>b__17_1(IAsyncResult r)    System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar,Func`2 endFunction,Action`1 endAction,Task`1 promise,Boolean requiresSynchronization)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Amqp.AmqpConnectionScope.CreateAndOpenConnectionAsync(Version amqpVersion,Uri serviceEndpoint,Uri connectionEndpoint,EventHubsTransportType transportType,IWebProxy proxy,Int32 sendBufferSizeBytes,Int32 receiveBufferSizeBytes,RemoteCertificateValidationCallback certificateValidationCallback,String scopeIdentifier,TimeSpan timeout)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.Amqp.FaultTolerantAmqpObject`1.OnCreateAsync[T](??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.Amqp.Singleton`1.GetOrCreateAsync[TValue](??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.Amqp.Singleton`1.GetOrCreateAsync[TValue](??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Amqp.AmqpConnectionScope.OpenProducerLinkAsync(String partitionId,TransportProducerFeatures features,PartitionPublishingOptions options,TimeSpan operationTimeout,TimeSpan linkTimeout,String linkIdentifier,CancellationToken cancellationToken)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Amqp.AmqpProducer.CreateLinkAndEnsureProducerStateAsync(String partitionId,String producerIdentifier,PartitionPublishingOptions partitionOptions,TimeSpan timeout,CancellationToken cancellationToken)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Amqp.AmqpProducer.CreateLinkAndEnsureProducerStateAsync(String partitionId,String producerIdentifier,PartitionPublishingOptions partitionOptions,TimeSpan timeout,CancellationToken cancellationToken)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.Amqp.FaultTolerantAmqpObject`1.OnCreateAsync[T](??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.Amqp.Singleton`1.GetOrCreateAsync[TValue](??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.Amqp.Singleton`1.GetOrCreateAsync[TValue](??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Amqp.AmqpProducer.CreateBatchAsync(CreateBatchOptions options,CancellationToken cancellationToken)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Amqp.AmqpProducer.CreateBatchAsync(CreateBatchOptions options,CancellationToken cancellationToken)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Azure.Messaging.EventHubs.Producer.EventHubProducerClient.CreateBatchAsync(??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    System.Threading.Tasks.ValueTask`1.get_Result()    async Microsoft.Azure.WebJobs.EventHubs.EventHubProducerClientImpl.CreateBatchAsync(??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.EventHubs.EventHubAsyncCollector.AddAsync(??)    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Bindings.TypedAsyncCollectorAdapter`3.AddAsync[TSrc,TDest,TAttribute](TSrc item,CancellationToken cancellationToken) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Bindings\AsyncCollector\TypedAsyncCollectorAdapter.cs  /40    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Binding.FunctionBinding.BindAsyncCollectorAsync[T](BindingContext context) /src/azure-functions-host/src/WebJobs.Script/Binding/FunctionBinding.cs  /200    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Binding.ExtensionBinding.BindAsync(BindingContext context) /src/azure-functions-host/src/WebJobs.Script/Binding/ExtensionBinding.cs  /80    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Description.WorkerFunctionInvoker.<>c__DisplayClass13_0.<BindOutputsAsync>b__0(??) /src/azure-functions-host/src/WebJobs.Script/Description/Workers/WorkerFunctionInvoker.cs  /182    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Description.WorkerFunctionInvoker.BindOutputsAsync(Object input,Binder binder,ScriptInvocationResult result) /src/azure-functions-host/src/WebJobs.Script/Description/Workers/WorkerFunctionInvoker.cs  /186    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Description.WorkerFunctionInvoker.InvokeCore(Object[] parameters,FunctionInvocationContext context) /src/azure-functions-host/src/WebJobs.Script/Description/Workers/WorkerFunctionInvoker.cs  /109    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(Object[] parameters) /src/azure-functions-host/src/WebJobs.Script/Description/FunctionInvokerBase.cs  /82    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Script.Description.FunctionGenerator.Coerce[T](Task`1 src) /src/azure-functions-host/src/WebJobs.Script/Description/FunctionGenerator.cs  /225    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`2.InvokeAsync[TReflected,TReturnValue](Object instance,Object[] arguments) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionInvoker.cs  /52    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeWithTimeoutAsync(IFunctionInvoker invoker,ParameterHelper parameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan timerInterval,IFunctionInstance instance) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs  /581    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstanceEx instance,ParameterHelper parameterHelper,ILogger logger,CancellationTokenSource functionCancellationTokenSource) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs  /527    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance,FunctionStartedMessage message,FunctionInstanceLogEntry instanceLogEntry,ParameterHelper parameterHelper,ILogger logger,CancellationToken cancellationToken) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs  /306    End of inner exception    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance,FunctionStartedMessage message,FunctionInstanceLogEntry instanceLogEntry,ParameterHelper parameterHelper,ILogger logger,CancellationToken cancellationToken) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs  /352    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.TryExecuteAsync(IFunctionInstance functionInstance,CancellationToken cancellationToken) D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs  /108

解决方案

1. 检查Event Hub网络防火墙设置

  • 进入Event Hub资源的网络设置,确认防火墙规则是否允许函数应用的出站IP访问。
  • 临时设置为“允许所有网络访问”进行测试,若测试通过,再添加函数应用的具体出站IP(可在函数应用概述页面获取)。

2. 验证函数应用的连接字符串配置

  • 在Azure门户的函数应用配置→应用设置中,检查smaseventhubsend_EVENTHUBSETTING的值是否与本地一致,确认连接字符串格式正确(包含Endpoint=sb://...;SharedAccessKeyName=...;SharedAccessKey=...)。

3. 检查函数应用的网络访问限制

  • 如果函数应用使用消费计划,且Event Hub配置了私有链接,需为函数应用启用虚拟网络集成,确保函数能访问私有端点。
  • 检查函数应用的网络→出站流量规则,是否允许访问Event Hub的AMQP端口(5671/5672)或服务端点。

4. 更新运行时与扩展版本

  • 确认函数应用的Node.js运行时版本为官方推荐版本(如18.x),可在配置→常规设置中调整。
  • 检查host.json中的Event Hub扩展版本,更新至最新稳定版:
    {
      "version": "2.0",
      "extensions": {
        "eventHubs": {
          "batchCheckpointFrequency": 5,
          "eventProcessorOptions": {
            "maxBatchSize": 100,
            "prefetchCount": 300
          }
        }
      }
    }
    

5. 测试连接连通性

  • 使用Azure门户的诊断工具→网络测试,测试函数应用到Event Hub端点的连通性,确认是否存在网络阻塞。

内容的提问来源于stack exchange,提问作者user4906240

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:47:03