如果我之后断开连接,Cumulocity 无法发布消息

Cumulocity cannot publish message if I Disconnect afterwards

我正在尝试编写一个服务来将数据转发到 cumulocity。

当传感器读取数据时,它会将数据发送到我们的服务器。 然后服务器将该数据转发到我的服务。 我解析它并使用智能 REST 模板将其发送到 cumulocity。

我查看了指南并将代码复制到那里进行了一些测试。 例如,设备创建消息如下所示。

public async Task ClientTest([FromBody] JObject sensorjson)
{
    var cDetails = new ConnectionDetailsBuilder()
       .WithClientId("clientId")
       .WithHost("mqtt.cumulocity.com")
       .WithCredentials("Credentials")
       .WithCleanSession(true)
       .(WithProtocol(TransportType.Tcp).Build();

    MqttClient client = new MqttClient(cDetails);

    await client.EstablishConnectionAsync();

    string topic = "s/us";
    string payload = $"100,TestDevice,Test";
    var message = new MqttMessageRequestBuilder()
        .WithTopicName(topic)
        .WithQoS(QoS.AT_LEAST_ONCE)
        .WithMessageContent(payload)
        .Build();

    await client.PublishAsync(message);

    await client.Disconnect();
}

当代码是这样的时候,我的cumulocity租户中没有创建任何设备。

当我注释掉 await client.Disconnect(); 时,它会创建设备。

这背后的原因是什么?

在我的真实代码中,如果我在某些时候不断开连接,则无法维持内存使用。如果我断开我的消息,请不要转到代理。

我该怎么办?

问题是因为您正在以 QOS1(至少一次)发布消息。这需要在客户端和代理之间进行多数据包握手。

await 应该意味着发布代码等待此完成,但看起来不是,这意味着您要在客户端完成 QOS1 的握手之前关闭它