Azure: ruta de IoT Hub a Service Bus: el Id. del primer mensaje siempr

Azure: ruta de IoT Hub a Service Bus: el Id. del primer mensaje siempre es nulo

Estoy enviando un mensaje desde un dispositivo a Azure IoT Hub con una ruta establecida para reenviar todos los mensajes del dispositivo a Azure Service Bus. Me di cuenta de un error en el que cada primer Id. de mensaje en el bus de servicio es nulo. Los siguientes mensajes están bien con una ID de mensaje válida.

Código del dispositivo:

        var messageString = JsonConvert.SerializeObject("json msg");
        var message = new Message(Encoding.ASCII.GetBytes(messageString));
        _deviceClient = DeviceClient.Create(IotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey(DeviceId, DeviceKey), TransportType.Amqp);
        await _deviceClient.SendEventAsync(message);

Sospecho que es un problema en el lado de IoT, ya que las pruebas sin IoT (envío directo) funcionan bien. ingrese la descripción de la imagen aquí

¿Alguna idea para solucionar problemas?

Esto parece estar relacionado: Mensaje nulo de AMQP cuando se usa Azure IoTHub Enrutamiento

Mostrar la mejor respuesta

su dispositivo debe tener una identificación de mensaje, por ejemplo:

message.MessageId = "your message id";

Gracias por tu comentario. Voy a darle una oportunidad. Me pregunto si debo completar la identificación del mensaje, ¿por qué la identificación del resto del mensaje que sigue tiene una identificación automáticamente? ver foto

En función de las rutas al punto de conexión predeterminado (eventos), los mensajes de EventData en el Centro de eventos no se completan para el ID de mensaje en Azure IoT Hub. Debe ser hecho por el remitente como un dispositivo. Entonces, volvamos al BrokeredMessage. Parece que el primer mensaje (en su imagen) es correcto cuando su valor es nulo y este valor debe permanecer nulo para otros mensajes hasta que el remitente (dispositivo) haga un cambio.

configurar el ID de mensaje lo soluciona (o mejor dicho, lo soluciona). El problema es que cuando envías un mensaje desde el dispositivo a IoT Hub, creas un Microsoft.Azure.Devices.Client.Message que no te obliga a configurar el Id (no en el constructor), así que asumí que está configurado automáticamente. y es como para el segundo mensaje... Creo que MS debería arreglarlo.

las propiedades del sistema de mensajes, como correlaciónId, messageId, to, ContentType y ContentEncoding, son totalmente transparentes para Azure IoT Hub. En otras palabras, el dispositivo (remitente) tiene la responsabilidad de completarlos. Por ejemplo, el dispositivo con un protocolo directo mqtt lo agregará al tema (&$.mid=myMessageId), o usando la API REST a través de un encabezado (iothub-messageId=myMessageId)

gracias que grandes ideas. Me pregunto si eso explica por qué el ID de mensaje se configura solo desde el segundo mensaje enviado. de la nada... a pesar de que no lo configuré en absoluto

parece que tener un ID de mensaje desde el segundo mensaje es un error. Puede verificar muy fácilmente usando una función Azure EventHubTrigger para consumir mensajes en el extremo de eventos. La propiedad message-id de systemproperties no existe (porque es nula).