【问题标题】:Sending AMQP Telemetry to Azure Event Hub not using TLS encryption不使用 TLS 加密将 AMQP 遥测发送到 Azure 事件中心
【发布时间】:2015-06-22 08:13:49
【问题描述】:

是否可以不使用 TLS 加密将 AMQP 数据包/遥测数据发送到 Azure 事件中心?

我想这样做的原因是想看看一个未加密的 AMQP 数据包到底长什么样。

我尝试了以下代码(请参阅 amqpTransSetting.UseSslStreamSecurity = false,但它仍然会加密通信。

        var amqpTransSetting = new AmqpTransportSettings();
        amqpTransSetting.UseSslStreamSecurity = false;

        var cs = @"Endpoint=sb://companyname-ns.servicebus.windows.net/;SharedAccessKeyName=EventHubPublisher;SharedAccessKey=84EHa5NNllnZBzH5ksogvNfhMWtIokdTdjxXXXXXXX=";

        var builder = new ServiceBusConnectionStringBuilder(cs)
                    {
                        TransportType = TransportType.Amqp,
                    };

        var client = EventHubClient.CreateFromConnectionString(builder.ToString(), "companyname-eh");

        int sentCount = sendCount;
        string infoText;

        for (int i = 0; i < sendCount; i++)
        {
            try
            {
                if (MessageType.Text == "Fake Sensor")
                {
                    infoText = "Sent using AMQP protocol";
                }
                else
                {
                    infoText = "Sent using AMQP protocol";
                }

                Random rnd = new Random();
                int intTemp = rnd.Next(15, 25);
                int intHum = rnd.Next(50, 80);

                var e = new Event
                {
                    MessageType = MessageType.Text,
                    Temp = intTemp,
                    Humidity = intHum,
                    Location = Location.Text,
                    Room = Room.Text,
                    Info = infoText
                };

                var serializedString = JsonConvert.SerializeObject(e);
                var data = new EventData(Encoding.UTF8.GetBytes(serializedString))
                {
                    PartitionKey = rnd.Next(6).ToString()
                };

                // Set user properties if needed
                data.Properties.Add("Type", "Telemetry_" + DateTime.Now.ToLongTimeString());



                await client.SendAsync(data).ConfigureAwait(false);
            }
            catch (Exception exp)
            {
                Console.WriteLine("Error on send: " + exp.Message);
                sentCount--;
            }

【问题讨论】:

  • 我建议你问一个关于你想要实现什么的新问题(或修改这个)。从下面的 cmets 听起来您可能对 HTTP 接口感到满意(我从未使用过它)。如果您期望有大量嵌入式设备,但任何单个设备的容量都不是特别大(即每台设备每秒几个就可以了),那么它应该更轻,并且每个集线器的 AMQP 连接数有限制。

标签: azure encryption azure-eventhub


【解决方案1】:

SSL/TLS 连接对于访问服务总线中的所有实体(队列、主题/订阅和事件中心)是必需的。没有它你无法连接。

保罗。

【讨论】:

  • 谢谢保罗。我开始看到情况就是这样......但我真的需要看看原始 AMQP 遥测数据包是什么样子的。因为我需要在 AMQP 之上手动创建一个,所以我可以使用小型嵌入式设备发送,而无需使用设备没有空间的大型库。关于如何做到这一点的任何建议?阅读规范是唯一的出路吗?这是我试图避免的大量时间投资:-(
  • 我的意思是在 TCP 之上创建一个 AMQP 数据包
  • AMQP 协议相当复杂,唯一的方法是使用库或编写一个阅读 AMQP 1.0 规范的新库。当然还有像 MQTT 这样更轻量级的协议,相关库比 AMQP 库更轻量级。但是,服务总线本身不支持 MQTT(但您可以在 Build 2015 之后等待 Azure IoT Suite),但您可以在 Azure Worker Role 或虚拟机中托管 MQTT 代理。请记住,MQTT 不支持作为 AMQP 的请求/回复模式(如相关性和回复),您必须使用精心设计的主题在 MQTT 上实现它(这是可能的)
  • 只是一个问题:您的示例使用 Azure SDK,但您说的是嵌入式设备。你有什么限制?
  • 大小是约束,我不能使用库。该示例是查看 AMQP 数据包的外观,因此我可以尝试在 TCP 之上手动创建它。我最近与 Event Hub 团队聊天,他们说他们不会支持 MQTT。我需要与事件中心直接通信,该解决方案需要高性能和可扩展性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多