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

无法将数据推送至Azure Event Hub问题求助

问题分析与解决方案

核心错误原因

你使用了异步版本的EventHubProducerClient(azure.eventhub.aio下的客户端),但Blob触发的函数是同步函数,同步线程中未初始化asyncio事件循环,因此抛出RuntimeError: There is no current event loop。

解决方案1:改用同步版EventHubProducerClient

直接替换为同步客户端,无需处理事件循环,适配同步函数场景:

import azure.functions as func
import logging  # 补充原代码缺失的logging导入
from azure.eventhub import EventData, EventHubProducerClient  # 导入同步版客户端


def main(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob \n" 
                 f"Name: {myblob.name}\n" 
                 f"Blob Size: {myblob.length} bytes")
    
    event_hub_connection_string = "Endpoint=sb://event-hub-namespace/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=sharedaccesskey"
    event_hub_name = "event_hub_name"
    
    # 初始化同步版ProducerClient
    producer = EventHubProducerClient.from_connection_string(
        event_hub_connection_string, 
        eventhub_name=event_hub_name
    )
    
    event_data = EventData(b'Hello, Event Hub!')
    # send_batch要求传入EventData列表,而非单个对象
    with producer:
        producer.send_batch([event_data])

解决方案2:将函数改为异步模式

若想保留异步客户端,需将Blob触发函数改为异步模式,Azure Functions支持异步函数:

import azure.functions as func
import logging
from azure.eventhub import EventData
from azure.eventhub.aio import EventHubProducerClient


async def main(myblob: func.InputStream):  # 函数定义前添加async关键字
    logging.info(f"Python blob trigger function processed blob \n" 
                 f"Name: {myblob.name}\n" 
                 f"Blob Size: {myblob.length} bytes")
    
    event_hub_connection_string = "Endpoint=sb://event-hub-namespace/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=sharedaccesskey"
    event_hub_name = "event_hub_name"
    
    producer = EventHubProducerClient.from_connection_string(
        event_hub_connection_string, 
        eventhub_name=event_hub_name
    )
    
    event_data = EventData(b'Hello, Event Hub!')
    # 异步上下文管理器使用async with,异步方法前加await
    async with producer:
        await producer.send_batch([event_data])

连接字符串正确性验证

检查你的连接字符串是否符合以下要求:

  • Endpoint格式:需为sb://<实际命名空间名>.servicebus.windows.net/,替换代码中的event-hub-namespace为真实命名空间名称
  • SharedAccessKeyName:若使用命名空间级密钥,RootManageSharedAccessKey是默认名称;若使用Event Hub级密钥,需对应正确的密钥名称
  • SharedAccessKey:替换为实际的密钥值,确保无多余空格或特殊字符
  • 若代码中已指定eventhub_name,连接字符串无需包含EntityPath=<Event Hub名称>;若未指定,则需在连接字符串中添加该字段

内容的提问来源于stack exchange,提问作者Ravi kant Gautam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:12:11