Queue Enqueue
nyx-queue es una cola de mensajes persistente en el puerto 6381. ENQUEUE agrega un mensaje y devuelve un ID único. QLEN devuelve la profundidad de la cola. Los mensajes sobreviven reinicios gracias al formato de persistencia .ndb.
Código
// nyx-queue — ENQUEUE messages to a persistent queue
// nyx-queue — encolar mensajes en una cola persistente
fn resp_cmd(parts: Array) -> String {
var sb: StringBuilder = StringBuilder.new()
sb.append("*" + int_to_string(parts.length()) + "\r\n")
var i: int = 0
while i < parts.length() {
let p: String = parts[i]
sb.append("$" + int_to_string(p.length()) + "\r\n" + p + "\r\n")
i = i + 1
}
return sb.to_string()
}
fn main() -> int {
// nyx-queue listens on port 6381 (RESP protocol like nyx-kv)
let fd: int = tcp_connect("127.0.0.1", 6381)
if fd < 0 {
print("connection failed (is nyx-queue running?)")
return 1
}
// Enqueue a message — returns a unique message ID
tcp_write(fd, resp_cmd(["ENQUEUE", "emails", "{\"to\":\"user@example.com\",\"subject\":\"Hi\"}"]))
let hdr: String = tcp_read_line(fd)
let msg_id: String = tcp_read_line(fd)
print("ENQUEUE -> msg_id: " + msg_id.trim())
// Get queue length
tcp_write(fd, resp_cmd(["QLEN", "emails"]))
let qlen: String = tcp_read_line(fd)
print("QLEN emails -> " + qlen.trim())
// Enqueue multiple messages for batch processing
var i: int = 0
while i < 3 {
let payload: String = "task_" + int_to_string(i)
tcp_write(fd, resp_cmd(["ENQUEUE", "tasks", payload]))
tcp_read_line(fd) // header
tcp_read_line(fd) // msg_id
i = i + 1
}
print("enqueued 3 tasks")
tcp_close(fd)
return 0
}
Salida
ENQUEUE -> msg_id: 1 QLEN emails -> :1 enqueued 3 tasks
Explicación
Las colas separan "aceptar el trabajo" de "hacer el trabajo realmente" — el handler web responde en microsegundos, mientras un pool de workers procesa el backlog a su propio ritmo. nyx-queue habla RESP sobre el puerto 6381, así que cualquier librería cliente de nyx-kv simplemente funciona; los comandos son la diferencia interesante. ENQUEUE agrega a una cola con nombre y devuelve un ID de mensaje monótono, útil para idempotencia y trazabilidad. QLEN es O(1) y perfecto para señales de autoescalado ("levantar un worker cuando la profundidad supere 1000"). La persistencia usa el mismo formato binario .ndb que nyx-kv, así que los mensajes sobreviven a un crash o reinicio — algo que colas en memoria como las listas de Redis no pueden garantizar sin AOF. Una sola cola puede manejar correos, notificaciones push y eventos de facturación, todo en paralelo.