Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 谷歌云物联网控制台日志中存在多个“MQTT断开连接-已存在”错误_Google Cloud Platform_Mqtt_Google Cloud Iot - Fatal编程技术网

Google cloud platform 谷歌云物联网控制台日志中存在多个“MQTT断开连接-已存在”错误

Google cloud platform 谷歌云物联网控制台日志中存在多个“MQTT断开连接-已存在”错误,google-cloud-platform,mqtt,google-cloud-iot,Google Cloud Platform,Mqtt,Google Cloud Iot,我在我的项目中使用Google IoT Core作为MQTT代理,将基于Atmel MCU的IoT嵌入式设备连接到Google云平台 在平台日志中,我遇到许多MQTT断开连接错误 jsonPayload: { disconnectType: "SERVER" eventType: "DISCONNECT" protocol: "MQTT" resourceName: "projects/xxxxxxx/locations/europe-west1/registr

我在我的项目中使用Google IoT Core作为MQTT代理,将基于Atmel MCU的IoT嵌入式设备连接到Google云平台

在平台日志中,我遇到许多MQTT断开连接错误

jsonPayload: {
  disconnectType: "SERVER"   
  eventType: "DISCONNECT"   
  protocol: "MQTT"   
  resourceName: "projects/xxxxxxx/locations/europe-west1/registries/xxxxxxxx/devices/1234567890"   
  serviceName: "cloudiot.googleapis.com"   
  status: {
   code: 6    
   description: "ALREADY_EXISTS"    
   message: "SERVER: The connection was closed because there is another active connection with the same device ID."    
  }
 }
labels: {
  device_id: "d1234567890"   
 }
 logName: "projects/xxxxxxxxx/logs/cloudiot.googleapis.com%2Fdevice_activity" 
该错误在设备启动并连接到MQTT服务器时生成。 尽管存在此错误,连接还是成功的,对主题和消息发布的订阅也是如此

我知道之前的连接没有正常关闭,但由于嵌入式设备的性质,这是不可能的,因为嵌入式设备意味着始终处于连接状态,并最终通过断开电源而关闭,因此之前无法向服务器发送断开消息

设备ID在每次重新连接时始终相同,但每个设备都是唯一的;我使用芯片序列号,就像谷歌的一些例子一样


我的问题是,如果有解决此错误的方法,则在开发阶段可以忽略此方法,但在生产环境中会出现不必要的行为。

我认为您希望出于卫生原因排除特定错误。我认为,当你查看日志时,你会对错误类型的消息保持警惕,这种性质的消息会被认为是分散注意力的

幸运的是,Stackdriver日志记录提供了排除功能。您可以提供一组筛选器,使Stackdriver放弃您明确选择不保留的日志条目。这里详细描述了这一点:

我发现页面上的插图特别有用

您可能想做的是计算一个与这种消息类型完全匹配的查询。我没有测试过它,但大致如下:

logName = 'cloudiot.googleapis.com%2Fdevice_activity'
jsonPayload.eventType = 'DISCONNECT'
jsonPayload.status.description= 'ALREADY_EXISTS'

一旦您有了一个只与要排除的消息匹配的筛选器表达式,您就可以将该筛选器用作排除筛选器。

我认为您希望由于卫生原因排除特定错误。我认为,当你查看日志时,你会对错误类型的消息保持警惕,这种性质的消息会被认为是分散注意力的

幸运的是,Stackdriver日志记录提供了排除功能。您可以提供一组筛选器,使Stackdriver放弃您明确选择不保留的日志条目。这里详细描述了这一点:

我发现页面上的插图特别有用

您可能想做的是计算一个与这种消息类型完全匹配的查询。我没有测试过它,但大致如下:

logName = 'cloudiot.googleapis.com%2Fdevice_activity'
jsonPayload.eventType = 'DISCONNECT'
jsonPayload.status.description= 'ALREADY_EXISTS'

一旦有了一个只与要排除的消息匹配的筛选器表达式,就可以将该筛选器用作排除筛选器。

到设备网桥的MQTT连接具有一些特殊属性,这些属性可能会导致断开连接。对于设备连接,为了网关的缘故,每个设备或设备ID只能有一个连接。在我看来,您尝试连接同一设备两次,导致断开连接

您可能有一个客户端试图打开两个连接,或者您正在连接第二个客户端。如果您连接同一设备两次,该设备将断开连接。可能您的客户机设置为打开多个通道,或者您的应用程序逻辑正在重新连接而没有断开连接


断开连接还有其他各种原因,例如,如果您试图使用不正确的QoS发布或发布到无效的主题,但这似乎不是因为给定的发布正在处理后续连接。

到设备网桥的MQTT连接有一些特殊属性,可能会导致断开连接。对于设备连接,为了网关的缘故,每个设备或设备ID只能有一个连接。在我看来,您尝试连接同一设备两次,导致断开连接

您可能有一个客户端试图打开两个连接,或者您正在连接第二个客户端。如果您连接同一设备两次,该设备将断开连接。可能您的客户机设置为打开多个通道,或者您的应用程序逻辑正在重新连接而没有断开连接


断开连接还有很多其他原因,例如,如果您试图使用不正确的QoS发布或发布到无效的主题,但这似乎不是因为给定的发布正在处理后续连接。

谢谢。正如您所解释的,我正在尝试设置排除,但在此之前,我想知道是否有办法避免生成此错误,或者最终我的代码中没有问题。您多久发送一次遥测?我们可能希望检查设计模式,该模式将形成一个新的MQTT连接,发送遥测数据,然后断开连接。这将与保持连接处于活动状态相反。虽然这不会完全消除该消息,但它可能会大大减少其被看到的频率。谢谢。我正试图在你解释时设置排除
但在此之前,我想知道是否有办法避免生成此错误,或者最终我的代码中没有问题。您多久发送一次遥测?我们可能希望检查设计模式,该模式将形成一个新的MQTT连接,发送遥测数据,然后断开连接。这将与保持连接处于活动状态相反。虽然这并不能完全消除信息,但它可能会大大减少信息被看到的频率。