C# 作为 Azure 事件中心的发送者和 python 作为接收者

C# as sender and python as receiver in Azure event hub

我有一个连接到 Azure 事件中心的 IoT 设备。我试图让这个设备与 azure databricks 通信,而 azure 事件中心作为中间件放置在两者之间。问题是,在我们能够通过“.NET 框架”发送消息之后,它永远不会显示在 "python" 命令行中收到的消息中(我们应该这样做,因为我们对每个部分都单独工作)

我遵循了指导方针 .NET framework as sender and python as receiver,但这行不通。

我发现事件中心流实例下的请求和消息图中存在峰值,但它从未显示在接收器中

==================================更新========== ========================

刚刚删除了 eventhub 并重新创建,它似乎有效。

但是,消息以长字符串的形式接收,如下所示:

Received: 662a2a44-4414-4cb5-a9e9-a08d12a417e0
Received: b68ef8f8-305f-4726-84e4-f35b76de30c5
Received: e94dfb73-972c-47b4-baef-1ab41b06be28
Received: 8eda384d-f79d-4cdf-9db3-fe5c2156553b
Received: d154283f-a8c2-4a4c-a7d5-e8d8129b568d
Received: 3e3e190e-f883-416c-a5be-b8cd8547d152
Received: e218c63b-85b3-4f4f-8f04-cb5ffc6d8921
Received: 0adec5ad-e351-4151-ba56-01093e0f383d
Received 8 messages in 0.05406975746154785 seconds

当我阅读以下格式的消息时会发生这种情况:

print("Received: {}".format(event_data.body_as_str(encoding='UTF-8')))

我试试看,我可以重现你的问题。这里有一些你需要检查的东西。

1.In 发件人(在 c# 中),您应该确保要发送的消息是正确的。如下所示:

    static void SendingRandomMessages()
    {
        var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
        int i = 0;
        while (true)
        {
            try
            {
                // make sure the message is correct.
                var message = i+":"+Guid.NewGuid().ToString()+":"+DateTime.Now;

                Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, message);
                var myeventdata = new EventData(Encoding.UTF8.GetBytes(message));
                eventHubClient.Send(myeventdata);
                i++;
                //eventHubClient.Send(new EventData(Encoding.UTF8.GetBytes(message)));
            }
            catch (Exception exception)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("{0} > Exception: {1}", DateTime.Now, exception.Message);
                Console.ResetColor();
            }

            Thread.Sleep(2000);
        }
    }

2.There 似乎对接收器有一些延迟(在 python 中),所以我执行了 python 接收器大约 3 次,我可以看到预期的输出。截图如下:

更新1022:正如我们在评论中讨论的那样,有一个解决方案可以解决只接收偶数/奇数事件数据的问题。

在你的发件人中(在 c# 中),使用下面的代码,它将事件数据发送到分区 0:

        static void SendingRandomMessages()
        {
            var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
            var myclient = eventHubClient.CreatePartitionedSender("0");
            int i = 30;

            while (true)
            {
                var message = i + ":" + Guid.NewGuid().ToString() + ":" + DateTime.Now;

                Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, message);
                var myeventdata = new EventData(Encoding.UTF8.GetBytes(message));
                myclient.Send(myeventdata);
                i++;
                Thread.Sleep(2000);
            }
          }

然后在你的receiver中(in python),指定partition为0(用这个PARTITION = "0"),然后你就可以得到所有的事件数据了。