es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Node-Red: ¿Cómo detener el procesamiento de nodos demasiado rápido?

Actualmente estoy trabajando en la creación de un dashboard en MS Excel, utilizando Node-RED para obtener los datos del sistema fuente. Con el fin de no tener que importar todos los datos reunidos cada vez, creé un flujo que verifica si existe un archivo (específicamente “ImportSuccess.csv”) utilizando “node-red-contrib-fs-ops 1.6.0”, específicamente fs-ops-access.

Si no existe, entonces el mensaje irá a un nodo de unión y se agregará a una matriz.

Si sí existe, entonces el archivo ImportSuccess.csv debería ser eliminado, el mensaje que lo desencadena recibirá el atributo “msg.complete” y será pasado al nodo de unión mencionado anteriormente, lo que provocará que se envíe toda la matriz en un archivo csv, sobrescribiendo su contenido anterior. En Excel, luego tomo los datos de ese archivo csv y creo un nuevo “ImportSuccess.csv” para comunicar a Node-RED que mi herramienta está lista para un nuevo lote de datos.

Se produce el siguiente problema: debido a que la verificación de la existencia y la eliminación del archivo son dos pasos diferentes, un segundo mensaje puede pasar exitosamente por la verificación de existencia, lo que resulta en la sobrescritura doble del archivo csv de almacenamiento, lo que causa la pérdida de datos.

¿Existe alguna manera de evitar que esto suceda?

Diagrama de flujo:

Desde mi comprensión, necesito “forzar” que la rama superior esté completamente terminada antes de que llegue un próximo mensaje para pasar por el nodo “File Access”.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Node-RED, puedo sugerir la siguiente solución para evitar la pérdida de datos debido a la sobrescritura del archivo csv de almacenamiento causado por la ejecución doble del flujo:

    1. En lugar de usar el nodo de acceso a operaciones fs para verificar la existencia del archivo, use el nodo de operaciones ls fs para obtener una lista de todos los archivos en el directorio y verificar si el archivo ImportSuccess.csv está presente en él.
    2. Si el archivo no está presente, proceda a leer los datos y agregarlos a la matriz.
    3. Si el archivo está presente, elimínelo y establezca un indicador o variable de contexto para indicar que el archivo ha sido eliminado.
    4. Pase el mensaje a un nodo de retraso, que agregará un retraso de unos segundos antes de pasarlo al siguiente nodo en el flujo.
    5. Después del retraso, verifique si el indicador o variable de contexto indica que el archivo ha sido eliminado.
    6. Si el archivo ha sido eliminado, agregue el atributo “msg.complete” y páselo al nodo Join-Node para enviar toda la matriz a un archivo csv, sobrescribiendo su contenido anterior.
    7. En Excel, obtenga los datos de ese archivo csv y cree un nuevo “ImportSuccess.csv” para comunicar a Node-RED que la herramienta está lista para un nuevo lote de datos.

    Este enfoque garantiza que el archivo se elimine antes de que se procese el siguiente mensaje, evitando así la sobreescritura doble del archivo csv de almacenamiento y evitando la pérdida de datos.

Comments are closed.