Quarkus: un ambiente locale per più servizi
Quarkus ha già risolto la parte che la maggior parte dei framework fa male: il dev mode ricarica al salvataggio e i Dev Services ti avviano un container per il database che ti eri dimenticato di far partire. Quello che non risolve è il servizio accanto, né quello dopo.
Dove si ferma il dev mode
- È per servizio. Cinque servizi sono cinque terminali, cinque dev mode e ricordarsi che porta ha preso ciascuno.
- Anche i Dev Services sono per servizio. Ognuno che vuole un database si porta il proprio container. Va bene per isolare e va male per un flusso in cui tre servizi leggono lo stesso topic Kafka.
- Gli URL fra i servizi restano affar tuo. Ogni
@ConfigPropertyo URL base di un client REST che punta a un altro servizio deve puntare da qualche parte quando non avvii l'intero sistema. - L'ordine conta ancora. Il reload non aiuta se la dipendenza non rispondeva quando è partito chi la chiama.
Cosa aggiunge Aseptic
Aseptic rileva un servizio Quarkus dal suo manifest e lo avvia come processo nativo con il tuo
strumento di build, iniettando la configurazione all'avvio come proprietà -D o
variabili d'ambiente. Gli URL fra i servizi vengono riscritti lì, quindi
application.properties resta esattamente com'è in git.
Uno scenario è il flusso: i servizi che vi partecipano, l'ordine di cui hanno bisogno e dove si risolve ogni dipendenza —un servizio locale, il vostro ambiente condiviso nel cloud o un mock—. Le porte che collidono vengono rimappate e il valore nuovo è quello che viene comunicato a chi chiama.
Per l'infrastruttura comune, Aseptic avvia Kafka, Redis e PostgreSQL in Docker una volta, per tutto lo scenario, e punta tutti i servizi alla stessa istanza. Questa è la differenza con i Dev Services: un broker condiviso dal flusso, invece di uno per servizio. Se per una specifica esecuzione preferisci i Dev Services, niente te lo impedisce: Aseptic avvia il tuo servizio come glielo dici tu.
Librerie che stai modificando nello stesso momento
Se la funzionalità abbraccia un servizio e una tua libreria, Aseptic costruisce la libreria e la collega dove Maven e Gradle la risolvono, ricostruendola e ricollegandola quando cambia. Il file di build del consumatore non viene mai modificato, e scollegare disfa solo ciò che Aseptic aveva messo.
Cosa non fa
Non sostituisce il dev mode, né dovrebbe: ricaricare al salvataggio è cosa di Quarkus e lo fa meglio di quanto potrebbe aggiungere qualsiasi lanciatore. Non costruisce immagini native né esegue un cluster Kubernetes, quindi tutto ciò che devi verificare a quel livello è di competenza di altro. E ha bisogno di Docker per l'infrastruttura comune.
È in beta pubblica, esce per Windows, macOS e Linux, ed è gratis per uso personale.
Accanto alle alternative
Se i tuoi servizi sono già in container e vengono distribuiti con manifest che mantieni, Tilt e Skaffold ti danno un ciclo con la forma della produzione. La pagina delle alternative a Docker Compose copre l'intero campo.
Ci sono equivalenti di questa pagina per Spring Boot e per Node.
Domande frequenti
Non mi basta il modo dev di Quarkus?
Per un servizio è eccellente. Quello che il modo dev non risolve è chi avvia gli altri, in che ordine e contro cosa: appena il flusso passa per tre servizi, quella parte resta tua.
Aseptic rompe l'hot reload di Quarkus?
No. Il servizio viene avviato come processo nativo con il suo comando, quindi l'hot reload è quello di sempre.
Posso mescolare Quarkus con servizi di un altro stack?
Sì. Il motore non porta logica di una tecnologia specifica: ogni stack ha il suo profilo e possono convivere in uno stesso scenario.