Aws-iot-device-sdk-python-v2: configurar la publicación sin conexión en v2

Creado en 31 jul. 2020  ·  6Comentarios  ·  Fuente: aws/aws-iot-device-sdk-python-v2

¿Su solicitud de función está relacionada con un problema?
No vi si offline publishing estaba habilitado de forma predeterminada.

Describe la solución que te gustaría
Como en python sdk v1, sería bueno ver algo como configureOfflinePublishQueueing método.

Describe las alternativas que has considerado
Tendría una cola de mantenimiento propia si el mensaje se publicó o no.

Contexto adicional
https://github.com/aws/aws-iot-device-sdk-python/blob/master/samples/basicPubSub/basicPubSub.py#L101

feature-request

Comentario más útil

También me gustaría entender esto con mayor detalle. Como se mencionó anteriormente, los mensajes que se publican sin conexión pasan a la cola y luego se publican cuando la conexión vuelve a estar en línea.

¿Cuántos mensajes se almacenan en la cola sin conexión? El SDK anterior le permitía elegir entre infinito, ninguno o una cantidad específica. No puedo encontrar ninguna documentación sobre esto. Suena infinito pero me gustaría saberlo. El SDK anterior también le permitía pasar de la parte superior o inferior de la cola. ¿Es eso posible ahora?

El SDK anterior también le permitió elegir una tasa de drenaje para los mensajes almacenados en la cola. ¿Es esto configurable ahora? Si no es así, ¿cuál es el valor?

Todos 6 comentarios

El comportamiento actual es:

  • Todos los mensajes publicados se ponen en cola antes de enviarse, independientemente de si el cliente está desconectado o conectado.
  • Cuando el cliente se conecta (o si ya está en línea), los mensajes de la cola se envían en orden.
  • SIN EMBARGO: Si el cliente estaba en línea y se desconecta, en ese momento cancela cada PUBLICAR y SUSCRIBIR en su cola.

Entendemos que esto es inconsistente. El usuario probablemente quiera:
1) los mensajes siempre se ponen en cola hasta que se pueden enviar
2) los mensajes fallan si el cliente está fuera de línea, o se desconecta antes de ser enviados.

Estamos evaluando muy activamente cambiar esto. Mantendré este problema abierto y lo actualizaremos cuando hagamos cambios (o formalicemos el comportamiento actual)

Si desea tomar el control total de su destino en este momento, puede crear una cola propia que envíe 1 mensaje a la vez al cliente. Si tiene éxito, envíe el siguiente. Si falla, vuelva a intentarlo. Esto también le brinda la oportunidad de tener un control total sobre la cantidad de tiempo que un mensaje puede estar en la cola, la cantidad de mensajes que estarán en la cola, etc.

Si desea tomar el control total de su destino en este momento, puede crear una cola propia que envíe 1 mensaje a la vez al cliente. Si tiene éxito, envíe el siguiente. Si falla, vuelva a intentarlo. Esto también le brinda la oportunidad de tener un control total sobre la cantidad de tiempo que un mensaje puede estar en la cola, la cantidad de mensajes que estarán en la cola, etc.

Hola @graebm. ¿Cómo harías eso? Si mi dispositivo publica mensajes, pero está fuera de línea, creo que esos mensajes se quedan en una especie de cola de espera. ¿Hay alguna forma de acceder a esta cola y eliminar ciertos mensajes de ella si aún no se han publicado?

Gracias

@samvandamme puede establecer la calidad de servicio (qos) como máximo una vez (0).
qos=mqtt.QoS.AT_MOST_ONCE
En el mismo dispositivo, suscríbase al tema en el que está publicando. Luego, para asegurarse de que se envíen los mensajes, mantenga una lista de los mensajes que haya publicado. Solo elimínelos cuando haya recibido el mensaje sobre el tema.

El comportamiento actual es:

  • Todos los mensajes publicados se ponen en cola antes de enviarse, independientemente de si el cliente está desconectado o conectado.
  • Cuando el cliente se conecta (o si ya está en línea), los mensajes de la cola se envían en orden.
  • SIN EMBARGO: Si el cliente estaba en línea y se desconecta, en ese momento cancela cada PUBLICAR y SUSCRIBIR en su cola.

Entendemos que esto es inconsistente. El usuario probablemente quiera:

  1. los mensajes siempre están en cola hasta que se puedan enviar
  2. los mensajes fallan si el cliente está fuera de línea o se desconecta antes de enviarse.

Estamos evaluando muy activamente cambiar esto. Mantendré este problema abierto y lo actualizaremos cuando hagamos cambios (o formalicemos el comportamiento actual)

Si desea tomar el control total de su destino en este momento, puede crear una cola propia que envíe 1 mensaje a la vez al cliente. Si tiene éxito, envíe el siguiente. Si falla, vuelva a intentarlo. Esto también le brinda la oportunidad de tener un control total sobre la cantidad de tiempo que un mensaje puede estar en la cola, la cantidad de mensajes que estarán en la cola, etc.

Entonces, ¿cuál es el enfoque recomendado para manejar dispositivos que se desconectan durante algunos períodos de tiempo?

Suponiendo que tengo un dispositivo que envía mensajes cada 5 segundos, el dispositivo está en línea, los mensajes llegan a AWS IoT Core. Luego, el dispositivo perdió la conexión durante 10 minutos y luego se vuelve a conectar. ¿Qué sucede con todos esos mensajes que se intentaron publicar durante el período de 10 minutos sin conexión? ¿Se publican tan pronto como el dispositivo vuelve a estar en línea o se pierden para siempre?

Los primeros mensajes se perderán mientras el sdk no se haya dado cuenta de que ya no está desconectado. Todos los mensajes posteriores se guardarán en la cola y se enviarán cuando se restablezca la conexión.

Al probar esto, perdí los primeros 5 mensajes al usar pubsub, que envía mensajes cada segundo. Por lo tanto, la mayor parte del tiempo solo perdería un mensaje.

También me gustaría entender esto con mayor detalle. Como se mencionó anteriormente, los mensajes que se publican sin conexión pasan a la cola y luego se publican cuando la conexión vuelve a estar en línea.

¿Cuántos mensajes se almacenan en la cola sin conexión? El SDK anterior le permitía elegir entre infinito, ninguno o una cantidad específica. No puedo encontrar ninguna documentación sobre esto. Suena infinito pero me gustaría saberlo. El SDK anterior también le permitía pasar de la parte superior o inferior de la cola. ¿Es eso posible ahora?

El SDK anterior también le permitió elegir una tasa de drenaje para los mensajes almacenados en la cola. ¿Es esto configurable ahora? Si no es así, ¿cuál es el valor?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

banuprathap picture banuprathap  ·  10Comentarios

victorct-pronto picture victorct-pronto  ·  3Comentarios

Sanrro10 picture Sanrro10  ·  16Comentarios

qcabrol picture qcabrol  ·  8Comentarios

GauravPatni picture GauravPatni  ·  4Comentarios