Отправка событий в Azure концентратор событий с помощью Python - PullRequest
1 голос
/ 17 января 2020

Ниже приведен пример кода, скопированного с сайта Microsoft . Я заменил концентраторы событий <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'

Ответы [ 2 ]

1 голос
/ 20 января 2020

Ссылка , на которую вы перешли, является устаревшей. На данный момент новая версия azure -eventhub для python - 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 событиях, использующих последний пакет, вы можете обратиться к этому последнему официальному документу c.

Надеюсь, это поможет.

1 голос
/ 17 января 2020

pip install выберет новый SDK, который по умолчанию равен 5.0. Пример кода не работает с 5.0. Пожалуйста, установите 1.3.1 SDK концентраторов событий. Это должно работать.

...