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