Decoder Microservice - Architecture & Flow
Overviewโ
Il Decoder รจ il microservizio che riceve dati GPS dai dispositivi tracker, li decodifica e li pubblica su Redis per il processing downstream.
๐ Struttura Packageโ
com.visla.decoder/
โโโ Main.java # Entry point
โโโ MainModule.java # Dependency Injection
โ
โโโ server/ # Gestione server TCP/UDP
โ โโโ ServerManager.java # Registra tutti i protocolli
โ โโโ TrackerServer.java # Server TCP/UDP per protocollo
โ โโโ TrackerConnector.java # Interfaccia connettore
โ โโโ TrackerClient.java # Client outbound (opzionale)
โ
โโโ pipeline/ # Pipeline Netty
โ โโโ BasePipelineFactory.java # Costruisce pipeline handler
โ โโโ PipelineBuilder.java # Builder per pipeline
โ โโโ ProcessingHandler.java # Pubblica su Redis
โ โโโ NetworkMessage.java # Wrapper messaggio rete
โ โโโ BufferingManager.java # Riordino posizioni
โ โโโ MediaManager.java # Gestione foto/video
โ โโโ network/ # Handler Netty
โ โโโ MainEventHandler.java
โ โโโ AcknowledgementHandler.java
โ โโโ ...
โ
โโโ frame/ # Frame decoders
โ โโโ BaseFrameDecoder.java # Base per split messaggi
โ โโโ CharacterDelimiterFrameDecoder.java
โ โโโ ExtendedObjectDecoder.java
โ
โโโ protocol/ # Protocolli GPS
โ โโโ base/ # Classi base
โ โ โโโ Protocol.java
โ โ โโโ BaseProtocol.java
โ โ โโโ BaseProtocolDecoder.java
โ โ โโโ BaseProtocolEncoder.java
โ โ
โ โโโ s21l/ # S21L (porta 5052) โ
โ โโโ g11lse/ # G11L-SE (porta 5058) โ
โ โโโ c059/ # C059 (porta 5059) โ
โ โโโ p5/ # P5 (porta 5054) โ
โ โโโ huabao/ # Base per S21L, P5, C003...
โ โโโ gt06/ # Base per G11LSE, R12L...
โ โโโ ... # Altri protocolli
โ
โโโ model/ # Modelli dati
โ โโโ Position.java # Posizione GPS
โ โโโ Device.java # Dispositivo
โ โโโ Command.java # Comando da inviare
โ โโโ Event.java # Evento rilevato
โ โโโ ...
โ
โโโ session/ # Gestione sessioni
โ โโโ DeviceSession.java # Sessione per device
โ โโโ ConnectionManager.java # Manager connessioni
โ โโโ cache/ # Cache device/position
โ
โโโ command/ # Gestione comandi
โ โโโ CommandConsumer.java # Riceve comandi da Redis
โ
โโโ config/ # Configurazione
โ โโโ Config.java
โ โโโ Keys.java # Chiavi configurazione
โ โโโ ...
โ
โโโ util/ # Utility
โโโ Checksum.java
โโโ Parser.java
โโโ DateBuilder.java
โโโ ...
๐ Data Flow: Device โ Redisโ
โโโโโโโโโโโโโโโโ
โ GPS Device โ
โ (S21L, G11L) โ
โโโโโโโโฌโโโโโโโโ
โ TCP/UDP (porta 5052, 5054, 5058, 5059)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. TrackerServer (server/) โ
โ - Accetta connessione โ
โ - Crea pipeline Netty โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. FrameDecoder (frame/) โ
โ - Split stream TCP in messaggi singoli โ
โ - Ogni protocollo ha il suo frame decoder โ
โ Input: [0x78][0x78][...data...][0x0D][0x0A] โ
โ Output: ByteBuf con messaggio completo โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. ProtocolDecoder (protocol/) โ
โ - Decodifica bytes โ Position object โ
โ - Estrae: lat, lon, speed, course, attributes โ
โ โ
โ Input: ByteBuf โ
โ Output: Position { โ
โ deviceId: 123, โ
โ latitude: 41.9028, โ
โ longitude: 12.4964, โ
โ speed: 45.5, โ
โ attributes: {ignition: true, alarm: null} โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. ProcessingHandler (pipeline/) โ
โ - Serializza Position in JSON โ
โ - Pubblica su Redis Pub/Sub โ
โ โ
โ Redis PUBLISH "positions" โ JSON โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. Downstream Microservices โ
โ - position-filter (filtra posizioni invalide) โ
โ - position-enricher (calcola distance, motion) โ
โ - db-persister (salva su PostgreSQL) โ
โ - event-detector (rileva eventi) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Command Flow: Redis โ Deviceโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ API/Frontend โ
โ POST /api/commands {deviceId: 123, type: "engineStop"} โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ Redis PUBLISH "commands"
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. CommandConsumer (command/) โ
โ - Sottoscritto a Redis channel "commands" โ
โ - Riceve comando JSON โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. ConnectionManager (session/) โ
โ - Trova sessione attiva per deviceId โ
โ - Recupera Netty Channel โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. ProtocolEncoder (protocol/) โ
โ - Codifica Command โ bytes โ
โ - Formatta secondo protocollo device โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ TCP/UDP
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GPS Device โ
โ - Riceve comando โ
โ - Esegue azione (stop engine, unlock doors, etc.) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Protocolli Attiviโ
| Protocollo | Porta | Device Supportati |
|---|---|---|
| S21L | 5052 | S21L series |
| P5 | 5054 | P5 series |
| G11L-SE | 5058 | G11L-SE |
| C059 | 5059 | C059 series |
๐ง Configurazioneโ
Le porte e i protocolli sono configurati tramite variabili d'ambiente o file di configurazione:
# Porta per protocollo S21L
s21l.port=5052
# Porta per protocollo G11L-SE
g11lse.port=5058
# Redis
redis.host=localhost
redis.port=6379
๐ Dipendenzeโ
- Netty - Framework I/O asincrono per TCP/UDP
- Redis (Jedis) - Pub/Sub per comunicazione inter-service
- Jackson - Serializzazione JSON
- Guice - Dependency Injection