将JSON文件发送到Azure事件中心

问题描述

我希望使用Microsoft网站中提供的示例代码将JSON文件发送到Azure事件中心。该代码似乎不正确,并且在事件中心中看不到以下上传文件

有人可以帮助发送实际的JSON文件吗?

import asyncio

from azure.eventhub import EventData
from azure.eventhub.aio import EventHubProducerClient


async def run():
    producer = EventHubProducerClient.from_connection_string(
        conn_str="foo",eventhub_name="boo")
    async with producer:
        event_data_batch = await producer.create_batch()
        event_data_batch.add(EventData(JSONFilepath))
        await producer.send_batch(event_data_batch)


loop = asyncio.get_event_loop()
loop.run_until_complete(run())

注意:我在运行程序时没有遇到错误

解决方法

用于将JSON对象和JSON字符串发送到事件中心的代码段

import asyncio
import nest_asyncio
nest_asyncio.apply()
from azure.eventhub.aio import EventHubProducerClient
from azure.eventhub import EventData
import json

async def run():
    # Create a producer client to send messages to the event hub.
    # Specify a connection string to your event hubs namespace and
        # the event hub name.
    producer = EventHubProducerClient.from_connection_string("<>",eventhub_name="<>")
    async with producer:
        # Create a batch.
        event_data_batch = await producer.create_batch()

        # Add events to the batch.

        #Method 1 - You provide a JSON string 
        body1 = '{"id":"device2","timestamp":"2016-01-17T01:17:00Z"}' 
        event_data_batch.add(EventData(body1))

        #Method 2 - You get the JSON Object and convert to string
        json_obj = {"id":"device3","timestamp":"2016-01-18T01:17:00Z"}
        body2= json.dumps(json_obj)
        event_data_batch.add(EventData(body2))


        #This just sending the string which will not be captured by TSI
        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())