Tengo un proyecto Typescript que usa amqp para conectarme a un corredor de AmazonMQ. Tengo muchos trabajadores que se conectan y procesan trabajos de las colas sin problemas la mayor parte del tiempo .
Parece que, por alguna razón, hay trabajos en la cola que RabbitMQ está reintentando ( como se indica en los encabezados que se configuran desde RMQ ), pero cuando el trabajador va a ack , aparece el siguiente error
Error: write ECONNRESET at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:94:16) at WriteWrap.callbackTrampoline (internal/async_hooks.js:130:17) at handleWriteReq (internal/stream_base_commons.js:53:26) at writeGeneric (internal/stream_base_commons.js:145:15) at TLSSocket.Socket._writeGeneric (net.js:798:11) at TLSSocket.Socket._write (net.js:810:8) at writeOrBuffer (internal/streams/writable.js:358:12) at TLSSocket.Writable.write (internal/streams/writable.js:303:10) at roundrobin (/app/node_modules/amqplib/lib/mux.js:61:25) at Mux._readIncoming (/app/node_modules/amqplib/lib/mux.js:67:3) at Immediate._onImmediate (/app/node_modules/amqplib/lib/mux.js:97:12) at processImmediate (internal/timers.js:464:21) at process.topLevelDomainCallback (domain.js:152:15) at process.callbackTrampoline (internal/async_hooks.js:128:24) Esto sólo ocurre cuando un trabajador de larga duración ( una hora o menos procesando el trabajo de la cola y tiene un latido en la URL de conexión ) intenta ack de la finalización de su trabajo para un trabajo que ya se completó . Esta falla hace que mi trabajador muera, lo que hace que RMQ vuelva a poner en cola el trabajo al parecer.
Estoy trabajando para construir una reproducción ficticia, pero está siendo difícil.
Tengo la sensación de que es porque estoy tratando de ack un trabajo que ya ha sido ack . Habría imaginado que RMQ no habría vuelto a poner en cola el trabajo si ese fuera el caso. ¿Alguien puede validar/mostrar dónde podría validar si ack volvería a poner en cola un trabajo que no se puede confirmar si no se ack confirmar porque ya se ack ?
¿Hay otro camino que pueda seguir para averiguar cuál es el problema? Todavía no tengo el manejo de errores adjunto al channel lanzado a producción y solo tengo estos registros adjuntos a la queue . Estoy tratando de enviar una actualización para obtener registros del channel para ver si hay más información allí. ¿Dónde más puedo buscar problemas?