我已经复制粘贴了这个脚本,效果很好。我从eventhub获取了所有的事件。
import logging
from azure.eventhub import EventHubConsumerClient
connection_str = '<< CONNECTION STRING FOR THE EVENT HUBS NAMESPACE >>'
consumer_group = '<< CONSUMER GROUP >>'
eventhub_name = '<< NAME OF THE EVENT HUB >>'
client = EventHubConsumerClient.from_connection_string(connection_str, consumer_group, eventhub_name=eventhub_name)
logger = logging.getLogger("azure.eventhub")
logging.basicConfig(level=logging.INFO)
def on_event(partition_context, event):
logger.info("Received event from partition {}".format(partition_context.partition_id))
partition_context.update_checkpoint(event)
with client:
client.receive(
on_event=on_event,
starting_position="-1", # "-1" is from the beginning of the partition.
)
# receive events from specified partition:
# client.receive(on_event=on_event, partition_id='0')
但是,一旦我试图从事件中获取任何值,我就会得到一个 OWNERSHIP_LOST 异常,而且脚本也没有检索到任何东西。
我试过 event.body.KEY
, event.KEY
, json.loads(event)['body']['key']
, json.loads(event)['key']
.无论我尝试与 events
它引发 OWNERSHIP_LOST。
你知道有什么解决方法吗,或者你知道我在这里做错了什么吗?
OWNERSHIP_LOST可能是由于接收事件时出错,或者on_event中出错造成的。 你可以试试event.body_as_json()['key']吗?