3.0.7 • Published 10 months ago

@fatmatto/jetpack v3.0.7

Weekly downloads
-
License
ISC
Repository
gitlab
Last release
10 months ago

Logger

const {Logger} = require('@fatmatto/jetpack')
const config = {
  logger: {
    type: 'file', // file | console | noop
    directory: 'path/to/logs'
  }
}
const logger = Logger.getLogger(config)

logger.log('info','Messaggio',{foo:{bar:{baz:1}}})

Logging Express Requests

app.use(Logger.logFinishedRequests)

// Or build a logger with the default formatter
app.use(Logger.buildRequestLogger())

// Or pass a custom formatter
app.use(Logger.buildRequestLogger({
  formatter: (req,res) => {
    return {...}
  }
}))

Queue

Creates a queue client for some message brokers such as:

  • Kafka
  • NATS
  • RabbitMQ (AMQP in general)
  • Mqtt
const config = {
  queue: {
    type: 'kafka', // kafka or nats or rabbitmq
    uri: 'http://kafka:9092',
    id: 'my-consumer'
  }
}

const eventsQueue = Queue.buildQueueClient(config, {
  queueName: 'events'
})


eventsQueue.push([{hello:'world'}])

eventsQueue.on('messages', messages => {
  console.log({messages})
})

eventsQueue.on('error', error => {
  console.log({error})
})

Rabbitmq

Nel caso di rabbitmq la topologia della coda è leggermente complicata dalla semantica di rabbitmq stesso:

  • I publisher pubblicano su un exchange.
  • Gli exchange rigirano i messaggi alle code
  • I consumer ascoltano sulle code

Un esempio pratico:

Supponiamo di volere che il broker pubblichi su apio-core-uplink Che il trasformer legga su apio-core-uplink e allo stesso tempo anche message parser legga da apio-core-uplink. Significa che trasformer e message-parser devono ricevere gli stessi messaggi. Se entrambi leggessero dalla stessa coda, si smisterebbero i messaggi. La soluzione è creare un exchange apio-core-uplink di tipo fanout, fare il bind a due queue, una chiamata apio-core-uplink-transformer e una chiamata apio-core-uplink-message-parser. A questo punto queste due code riceveranno tutti i messaggi pubblicati su exchange apio-core-uplink.

NATS

Nel caso di NATS, poiché usiamo i consumer in pull, è necessario specificare il nome del consumer (attraverso il parametro "id") oltreché il nome della coda; in questo modo NATS può provvedere al bilanciamento: lo fa in automatico, basta che due o più consumer vadano a leggere dalla stessa coda. Questo spiega la necessità di mantenere due parametri distinti. Però il durable (cioè il nome del consumer) deve essere univoco e quindi in caso di autoscaling potrebbero esserci problemi; a meno che non si possano passare configurazioni ad hoc alle repliche tramite docker-compose.

Inoltre, visto che è necessario mandare esplicitamente l'ACK, i messaggi vengono restituiti direttamente col formato dati di NATS arricchiti dal campo "payload", che contiene il messaggio parsato. In questo modo - dopo aver esaminato il singolo messaggio - è possibile chiamare i metodi "ack", "nak" o "term" a seconda del caso. Infine, i messaggi vengono messi in stato di "working" prima di essere restituiti; questo evita che in caso di timeout - o altra ragione - essi vengano ricevuti una seconda volta (comportamento di NATS in caso di mancata ricezione dell'ACK).

2.0.3

1 year ago

2.2.0

1 year ago

2.0.2

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

2.0.7

1 year ago

2.0.6

1 year ago

2.0.9

1 year ago

2.0.8

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

3.0.4

10 months ago

3.0.3

10 months ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.7

10 months ago

3.0.6

10 months ago

3.0.5

10 months ago

3.0.0

1 year ago

2.1.2

1 year ago

2.1.1

1 year ago

2.1.4

1 year ago

2.1.3

1 year ago

2.0.11

1 year ago

2.0.10

1 year ago

2.1.0

1 year ago

1.6.4

2 years ago

1.6.3

2 years ago

1.6.2

2 years ago

1.6.1

2 years ago

1.6.0

2 years ago

1.4.4

2 years ago

1.4.3

2 years ago

1.4.2

3 years ago

1.5.1

2 years ago

1.5.0

2 years ago

1.2.10-next.12

3 years ago

1.2.10-next.11

3 years ago

1.2.10-next.10

3 years ago

1.2.10-next.16

3 years ago

1.4.1

3 years ago

1.2.10-next.15

3 years ago

1.4.0

3 years ago

1.2.10-next.14

3 years ago

1.2.10-next.13

3 years ago

1.2.10-next.9

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.10-next.8

3 years ago

1.2.10-next.6

3 years ago

1.2.10-next.7

3 years ago

1.2.8

4 years ago

1.2.7

4 years ago

1.2.6

4 years ago

1.2.5

4 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.10-next.2

3 years ago

1.2.10-next.3

3 years ago

1.2.10-next.4

3 years ago

1.2.10-next.5

3 years ago

1.2.10-next.0

3 years ago

1.2.10-next.1

3 years ago

1.2.9

4 years ago

1.2.10

4 years ago

1.2.0

4 years ago

1.2.1

4 years ago

1.1.9

4 years ago

1.1.8

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.12

4 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago