【问题标题】:IOT hub message processor物联网中心消息处理器
【发布时间】:2016-06-06 06:15:42
【问题描述】:

在处理 Azure IoT Hub 中创建的消息时遇到一些问题。

出现以下错误:抛出异常: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));
            }
        }
    }
}

【问题讨论】:

  • 您不应该使用与事件中心兼容的端点来使用 EventHubClient 吗?
  • 您好,您还有这个问题吗?

标签: azure iot azure-iot-hub


【解决方案1】:

我在测试您的代码时没有遇到此问题,因此它可能与其他问题有关。我找到了重复的线程Azure IoT hub basic receiving example, AMQP error,它建议检查阻塞端口或代理设置,你可以试试。

【讨论】:

    【解决方案2】:

    您的 iotHubD2cEndpoint 格式不正确。您可以在 azure 门户 -> 消息 -> 设备到云设置中找到兼容的端点。

    我发现这是一个非常有用的例子:https://github.com/ppatierno/codesamples/tree/master/IoTHubAmqp/IoTHubAmqp

    【讨论】:

      【解决方案3】:

      代码对我来说看起来不错。我的是一模一样的,效果很好。

      最好的办法是在 Azure 中创建一个新的 IoT 中心并替换字符串。

      【讨论】:

        【解决方案4】:

        在构建连接字符串时,您可以在第 12 行尝试“Endpoint=”而不是“HostName=”吗?

        希望这会有所帮助!

        默特

        【讨论】:

          【解决方案5】:

          几个cmets:

          1. 请确保您使用的是最新版本的服务总线 dll。即 3.1.7(截至今天)。
          2. 请不要在代码中混用异步和同步方法调用。

          如果您仍然遇到此问题,请告诉我们。

          【讨论】:

            【解决方案6】:

            有时我看到代理过滤 amqp 数据包。将传输类型更改为 http 可能会解决问题。 现在我无法访问 Visual Studio,但我似乎记得可以在客户端属性下设置传输。 如果您尝试一下,您可以轻松找到问题出在代理还是程序中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-04-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-29
              • 1970-01-01
              相关资源
              最近更新 更多