簡體   English   中英

物聯網中心消息處理器

[英]IOT hub message processor

處理在Azure IoT中心中創建的消息時遇到一些麻煩。

得到以下錯誤:引發異常:Microsoft.ServiceBus.dll中的“ Microsoft.ServiceBus.Messaging.Amqp.AmqpException”(“發生AMQP錯誤(條件='amqp:link:redirect')。”)

誰能指出我正確的方向?

問候,喬納斯

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Messaging;

namespace IOTHubMessageProcessor
{
    class Program
    {
        static string connectionString = "HostName=yaddaaaa.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=keydataasdss+tacsCxwkWQeUm9sMCc2GHnQkIZHM=";
        static string iotHubD2cEndpoint = "messages/events";
        static EventHubClient eventHubClient;
        static void Main(string[] args)
        {

            Console.WriteLine("Receive messages\n");
            eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, iotHubD2cEndpoint);

            var d2cPartitions = eventHubClient.GetRuntimeInformation().PartitionIds;

            foreach (string partition in d2cPartitions)
            {
                ReceiveMessagesFromDeviceAsync(partition);
            }
            Console.ReadLine();
        }


        private async static Task ReceiveMessagesFromDeviceAsync(string partition)
        {
            var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);

            while (true)
            {
                EventData eventData = await eventHubReceiver.ReceiveAsync();
                if (eventData == null) continue;

                string data = Encoding.UTF8.GetString(eventData.GetBytes());
                Console.WriteLine(string.Format("Message received. Partition: {0} Data: '{1}'", partition, data));
            }
        }
    }
}

使用您的代碼進行測試時,我沒有遇到此問題,因此它可能與其他問題有關。 我發現重復線程Azure IoT中心基本接收示例AMQP錯誤 ,它建議檢查塊端口或代理設置,您可以嘗試一下。

您的iotHubD2cEndpoint的格式不正確。 您可以在Azure門戶->消息->設備到雲設置中找到兼容的端點。

我發現這是一個非常有用的示例: https : //github.com/ppatierno/codesamples/tree/master/IoTHubAmqp/IoTHubAmqp

代碼看起來很好。 我的是相同的,並且運作良好。

最好的選擇是在Azure中創建一個新的IoT中心並替換字符串。

在建立連接字符串時,可以在第12行嘗試使用“ Endpoint =”代替“ HostName =”嗎?

希望這可以幫助!

莫特

幾點評論:

  1. 請確保您使用的是最新版本的Service Bus dll。 即3.1.7(截至今天)。
  2. 請不要在代碼中混用異步和同步方法調用。

讓我們知道您是否仍然遇到此問題。

有時我看到代理過濾amqp數據包。 將傳輸類型更改為http可能會解決此問題。 現在,我沒有訪問Visual Studio的權限,但我似乎記得,可以在客戶端屬性下設置傳輸方式。 如果嘗試使用它,您可以輕松找到問題出在代理服務器還是程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM