🎉 Il Necronomicon è stato aggiornato alla versione 2.0.0 🎉
Microservizi Interni
Documentazione Microservizi
Thot

Event Logger Microservice

Questo microservizio si occupa di registrare tutti gli eventi che sono stati triggerati all'interno di una coda di messaggi creata tramite l'utilizzo della libreria BullMQ che sfrutta redis. Questi eventi vengono poi salvati in un database

Logica

logger eventi

  • 1.0 Viene effettuata una richiesta a un servizio

  • 2 Il servizio produce un evento e lo invia in coda:

    • 2.0: Il servizio risponde
    • 2.1: Il servizio produce un evento inviandolo in coda su Redis
  • 3 Il microservizio riceve l'evento

  • 4 Il microservizio salva l'evento nel database

Questo permette quindi una gestione del salvataggio degli eventi totalmente asincrona

Setup

Per poter utlizzare il microservizio è necessario eseguire una configurazione del microservizioe e una in ogni servizio che produce un evento

Configurazione del microservizio

  1. Installare i pacchetti necessari per il funzionamento del microservizio
pnpm install
  1. Creare un file .env con le seguenti variabili d'ambiente
ℹ️

La sezione relativa a redis è costante (ovvero rimane sempre uguale a prescindere dal tipo di database che viene utilizzato nello stack), quella relativa al database varia in base al database scelto, in questo caso è stato utilizzato MongoDB

# Database
MONGODB_URI="XXXXXXXXX"
 
# Redis
REDIS_HOST="localhost"
REDIS_PORT="6379"
  1. Modificare il file lib/logger.config.ts che è così strutturato:
import Event from "./database/event";
 
// QueueEvent è il tipo dell'evento, modificalo in base a quello che ti serve. Potrai utilizzare questo tipo senza doverlo importare in tutti i file all'interno del progetto (a patto che il file si trovi all'interno della cartella lib)
 
declare global {
  type QueueEvent = any;
}
 
// LoggerConfiguration è la configurazione del logger, all'interno puoi trovare il nome della coda di messaggi e la funzione che salva l'evento nel database
 
export const configuration: LoggerConfiguration = {
  queueName: "events",
  saver: async (event) => {
    await new Event({
      name: event.name,
      ...event.data,
      timestamp: new Date(event.data.timestamp),
    }).save();
  },
};
  1. Eseguire il microservizio
pnpm start

Configurazione del servizio che produce gli eventi

  1. Installare BullMQ
pnpm install bullmq
  1. copia il contenuto di questo file (opens in a new tab) all'interno del tuo progetto All'interno troverai 2 funzioni che ti permetteranno di registrare un evento e di inviarlo in coda La prima funzione è emitEventMiddleware che è un middleware che viene utilizzato per registrare un evento. La seconda funzione è emitEvent che viene utilizzata per inviare l'evento in coda

    Leggi qui (opens in a new tab) la documentazione