Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

¿Hermetry conserva mis mensajes QoS 1 si la pasarela se desconecta, o necesito mi propio búfer?

¿Hermetry conserva mis mensajes QoS 1 si la pasarela se desconecta, o necesito mi propio búfer?

Resuelto 7 6

Traducido del English por IA ·

Ejecutamos un servicio en Go en una caja edge de un parque solar que lee los inversores y publica en Hermetry mediante MQTT con QoS 1. El enlace es un router 4G que se cae unas pocas veces al día, normalmente entre 30 s y unos minutos.Mi modelo mental viene de cuando usábamos nuestro propio Mosquitto hace años: el broker persiste los mensajes QoS 1 en disco, el cliente se reconecta con clean session = false y se entrega todo lo que estaba en cola. Por eso puse CleanSession en false en el cliente y di por hecho que Hermetry guarda los datos en ambos sentidos por nosotros.Al revisar el historial tras una caída, veo huecos de exactamente la duración del corte. ¿El broker de Hermetry no persiste los mensajes? ¿Tengo que activar algún ajuste o el almacenamiento en búfer es responsabilidad mía?Lo que he comprobado hasta ahora: la pestaña Log del dispositivo muestra la desconexión con keepalive_timeout y una reconexión unos minutos después, como se esperaba. Los logs de nuestro cliente indican que las publicaciones durante el corte devolvieron respuesta sin error, y eso me hizo pensar que el broker las tenía. Las lecturas de los inversores se envían cada 30 s, con un ts tomado del reloj propio del inversor (sincronizado por NTP), en el formato {«ts»: …, «values»: {…}}. Necesitamos que el historial esté completo porque el propietario del parque factura mensualmente a partir de él, así que cada pocos minutos perdidos al día cuestan dinero.

♥ 0

Traducido del English por IA ·

Los huecos de exactamente la duración de la caída parecen indicar que no se publicó nada durante la caída, y no que el broker los perdiera. ¿Tu cliente encola siquiera los mensajes mientras está desconectado?

If it isn't logged, it didn't happen.
♥ 0

Traducido del English por IA ·

Buen punto. Paho Go usa el almacén en memoria por defecto. Yo había asumido que los encola mientras está sin conexión.

♥ 1

Traducido del English por IA ·

Desde el lado de la dirección: nuestro integrador nos dijo lo mismo sobre los huecos, y acabaron añadiendo almacenamiento en el equipo. No puedo darles los detalles, lo siento.

♥ 0

Traducido del English por IA ·

Clean session false no servirá de nada en Hermetry de todos modos. Estoy bastante seguro de que la documentación dice que se sirve como clean session.

♥ 1

Traducido del English por IA ·

Kevin tiene razón, y eso es solo la mitad. Nos encontramos con lo mismo en un parque eólico.El MQTT de Hermetry es 3.1.1, y un CONNECT con clean session en false se atiende como clean. No se encola nada para un dispositivo mientras está desconectado, salvo los comandos enviados como persistentes. Por tanto, no hay estado de sesión que reanudar, en ninguna dirección para la telemetría.Lo que Hermetry sí garantiza es en el sentido de entrada: el PUBACK solo se envía después de que el mensaje esté encolado de forma segura en su lado. Si no puede encolarse, no recibes PUBACK, la sesión se cierra y se espera que el cliente vuelva a enviarlo tras reconectar. Los duplicados con el mismo dispositivo, clave y marca de tiempo se almacenan una sola vez, así que reenviar es seguro.Así pues, el búfer es tuyo, y el patrón es:

  1. Escribe cada lectura en un almacenamiento local (nosotros usamos un archivo SQLite) con su propio ts en ms.
  2. Publica desde el almacenamiento y elimina una fila solo cuando llegue su PUBACK.
  3. Tras reconectar: suscríbete, solicita los atributos compartidos y luego envía el backlog antes de los datos en vivo.

Envía el backlog como arrays de {ts, values} para que llegue en los momentos correctos. El perfil tiene un límite separado de Mensajes de repetición por segundo para mensajes cuyos registros son todos anteriores a un minuto, así que un backlog largo se vacía en un tiempo. No te preocupes si no aparece todo a la vez.La página de MQTT tiene la sección de confirmaciones, vale la pena leerla una vez.

If it isn't logged, it didn't happen.
Solución aceptada♥ 2

Traducido del English por IA ·

Sí. El almacenamiento en memoria de Paho descartaba todo al desconectarse, así que la suposición de Maria también acertó. Puse un archivo bbolt delante del publicador, que se borra al recibir PUBACK, y para probarlo desconecté la antena 4G durante 5 minutos: el historial mostró los datos acumulados con las marcas de tiempo correctas unos 20 s después de reconectar. También eliminé la línea CleanSession=false, ya que no hacía nada.

♥ 1

Traducido del English por IA ·

Una cosa más: limita el almacenamiento local. Una vez tuvimos un sitio desconectado durante 9 days y el disco se llenó. Las lecturas más antiguas que tu retención se rechazan de todos modos.

♥ 1
Viendo 8 entradas – de la 1 a la 8 (de un total de 8)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir