使用 Python 将事件发送到 Azure 事件中心
Send events to Azure event hub using Python
下面是从微软的site复制的示例代码。我确实用所需的值替换了事件中心 <namespace>
、<eventhub>
、<AccessKeyName>
和 <primary key value>
。
import sys
import logging
import datetime
import time
import os
from azure.eventhub import EventHubClient, Sender, EventData
logger = logging.getLogger("azure")
# Address can be in either of these formats:
# "amqps://<URL-encoded-SAS-policy>:<URL-encoded-SAS-key>@<namespace>.servicebus.windows.net/eventhub"
# "amqps://<namespace>.servicebus.windows.net/<eventhub>"
# SAS policy and key are not required if they are encoded in the URL
ADDRESS = "amqps://<namespace>.servicebus.windows.net/<eventhub>"
USER = "<AccessKeyName>"
KEY = "<primary key value>"
try:
if not ADDRESS:
raise ValueError("No EventHubs URL supplied.")
# Create Event Hubs client
client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
sender = client.add_sender(partition="0")
client.run()
try:
start_time = time.time()
for i in range(100):
print("Sending message: {}".format(i))
message = "Message {}".format(i)
sender.send(EventData(message))
except:
raise
finally:
end_time = time.time()
client.stop()
run_time = end_time - start_time
logger.info("Runtime: {} seconds".format(run_time))
except KeyboardInterrupt:
pass
但是,当我执行这段代码时,出现以下错误。
Traceback (most recent call last):
File "newBlobStream.py", line 7, in <module>
from azure.eventhub import EventHubClient, Sender, EventData
ImportError: cannot import name 'EventHubClient' from 'azure.eventhub'
pip install 将选择默认为 5.0 的新 SDK。示例代码不会在 5.0 中运行。请安装事件中心 SDK 的 1.3.1。它应该有效。
您关注的 link 是旧版。截至目前,python 的新版 azure-eventhub 为 v5,默认安装(使用 pip install azure-eventhub
时),请按照以下代码发送事件:
import asyncio
from azure.eventhub.aio import EventHubProducerClient
from azure.eventhub import EventData
async def run():
# create a producer client to send messages to the event hub
# specify connection string to your event hubs namespace and
# the event hub name
producer = EventHubProducerClient.from_connection_string(conn_str="EVENT HUBS NAMESPACE - CONNECTION STRING", eventhub_name="EVENT HUB NAME")
async with producer:
# create a batch
event_data_batch = await producer.create_batch()
# add events to the batch
event_data_batch.add(EventData('First event '))
event_data_batch.add(EventData('Second event'))
event_data_batch.add(EventData('Third event'))
# send the batch of events to the event hub
await producer.send_batch(event_data_batch)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
关于sending
/ receiving
事件使用最新包的更多详情,您可以参考这个最新的official doc.
希望对您有所帮助。
下面是从微软的site复制的示例代码。我确实用所需的值替换了事件中心 <namespace>
、<eventhub>
、<AccessKeyName>
和 <primary key value>
。
import sys
import logging
import datetime
import time
import os
from azure.eventhub import EventHubClient, Sender, EventData
logger = logging.getLogger("azure")
# Address can be in either of these formats:
# "amqps://<URL-encoded-SAS-policy>:<URL-encoded-SAS-key>@<namespace>.servicebus.windows.net/eventhub"
# "amqps://<namespace>.servicebus.windows.net/<eventhub>"
# SAS policy and key are not required if they are encoded in the URL
ADDRESS = "amqps://<namespace>.servicebus.windows.net/<eventhub>"
USER = "<AccessKeyName>"
KEY = "<primary key value>"
try:
if not ADDRESS:
raise ValueError("No EventHubs URL supplied.")
# Create Event Hubs client
client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
sender = client.add_sender(partition="0")
client.run()
try:
start_time = time.time()
for i in range(100):
print("Sending message: {}".format(i))
message = "Message {}".format(i)
sender.send(EventData(message))
except:
raise
finally:
end_time = time.time()
client.stop()
run_time = end_time - start_time
logger.info("Runtime: {} seconds".format(run_time))
except KeyboardInterrupt:
pass
但是,当我执行这段代码时,出现以下错误。
Traceback (most recent call last):
File "newBlobStream.py", line 7, in <module>
from azure.eventhub import EventHubClient, Sender, EventData
ImportError: cannot import name 'EventHubClient' from 'azure.eventhub'
pip install 将选择默认为 5.0 的新 SDK。示例代码不会在 5.0 中运行。请安装事件中心 SDK 的 1.3.1。它应该有效。
您关注的 link 是旧版。截至目前,python 的新版 azure-eventhub 为 v5,默认安装(使用 pip install azure-eventhub
时),请按照以下代码发送事件:
import asyncio
from azure.eventhub.aio import EventHubProducerClient
from azure.eventhub import EventData
async def run():
# create a producer client to send messages to the event hub
# specify connection string to your event hubs namespace and
# the event hub name
producer = EventHubProducerClient.from_connection_string(conn_str="EVENT HUBS NAMESPACE - CONNECTION STRING", eventhub_name="EVENT HUB NAME")
async with producer:
# create a batch
event_data_batch = await producer.create_batch()
# add events to the batch
event_data_batch.add(EventData('First event '))
event_data_batch.add(EventData('Second event'))
event_data_batch.add(EventData('Third event'))
# send the batch of events to the event hub
await producer.send_batch(event_data_batch)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
关于sending
/ receiving
事件使用最新包的更多详情,您可以参考这个最新的official doc.
希望对您有所帮助。