Vai al contenuto principale
Versione: 3.0.0-alpha (Diátaxis)

FAQ — NATS

È necessario attivare JetStream?

JetStream aggiunge la persistenza, lo streaming e il replay dei messaggi a NATS. Senza JetStream, NATS funziona in modalità pub/sub puro (fire-and-forget): i messaggi vengono trasmessi solo agli iscritti connessi al momento della pubblicazione.

JetStream è attivato per impostazione predefinita (jetstream.enabled: true). Disattivatelo solo se avete bisogno unicamente di messaggistica effimera senza persistenza:

nats.yaml
jetstream:
enabled: true
size: 10Gi
suggerimento

In produzione, mantenete sempre JetStream attivato per beneficiare della persistenza dei messaggi, della possibilità di rileggere gli eventi e dei consumer group durevoli.

Qual è la differenza tra pub/sub e queue group?

NATS propone due modelli di consumo:

  • Pub/sub classico: ogni iscritto riceve tutti i messaggi pubblicati sul subject. Adatto alla diffusione (notifiche, log).
  • Queue group: gli iscritti di uno stesso gruppo si condividono i messaggi (load balancing). Ogni messaggio viene consegnato a un solo iscritto del gruppo. Adatto all'elaborazione distribuita.

Più queue group possono iscriversi allo stesso subject — ogni gruppo riceve una copia di ogni messaggio, ma un solo membro per gruppo lo elabora.

Come funzionano i wildcard nei subject?

NATS utilizza un sistema di subject gerarchici separati da punti (.). Sono disponibili due wildcard:

WildcardDescrizioneEsempio
*Corrisponde a un solo tokenorders.* corrisponde a orders.new ma non a orders.new.urgent
>Corrisponde a uno o più tokenorders.> corrisponde a orders.new, orders.new.urgent, ecc.

Esempi:

  • logs.*: riceve logs.info, logs.error, ma non logs.app.error
  • logs.>: riceve logs.info, logs.error, logs.app.error, ecc.

Qual è la differenza tra resourcesPreset e resources?

Il campo resourcesPreset applica una configurazione CPU/memoria predefinita, mentre resources permette di specificare valori espliciti. Se resources è definito, resourcesPreset viene ignorato.

PresetCPUMemoria
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi

Esempio con risorse esplicite:

nats.yaml
replicas: 3
resources:
cpu: 2000m
memory: 2Gi

NATS persiste i messaggi?

Per impostazione predefinita, NATS funziona in modalità fire-and-forget: i messaggi vengono trasmessi solo agli iscritti connessi al momento della pubblicazione. Nessuna persistenza avviene senza configurazione aggiuntiva.

Per persistere i messaggi, devono essere soddisfatte due condizioni:

  1. JetStream deve essere attivato (jetstream.enabled: true)
  2. Uno stream deve essere creato per catturare i messaggi dei subject interessati

Senza uno stream configurato, anche con JetStream attivato, i messaggi pubblicati su un subject senza stream associato non vengono persistiti.

Come configurare NATS in modo avanzato?

Il campo config.merge consente di aggiungere o sovrascrivere parametri della configurazione NATS:

nats.yaml
config:
merge:
max_payload: 8MB
write_deadline: 2s
debug: false
trace: false

Parametri comuni:

ParametroDescrizioneDefault
max_payloadDimensione massima di un messaggio1MB
write_deadlineTimeout di scrittura verso un client2s
debugAttiva i log di debugfalse
traceAttiva il tracciamento dei messaggi (molto verboso)false
avviso

Attivare debug e trace in produzione genera un volume di log considerevole. Utilizzateli solo per la diagnostica temporanea.