A Clojure microservice foundation with component lifecycle management, configuration, health checks, and scheduling.
tesla-microservice is a Clojure library that serves as a common foundation for building microservices, leveraging the component framework for lifecycle management. It handles configuration loading, health checks, task scheduling, metrics reporting, and graceful shutdown, reducing boilerplate for service developers. The project originated at otto.de to standardize microservice development across teams.
Clojure developers and teams building microservices who need a structured, reusable foundation with built-in operational features like configuration, health checks, and metrics.
Developers choose tesla-microservice for its minimal, composable design that integrates seamlessly with the component framework, offering essential microservice capabilities without locking them into a specific server or heavy framework. Its extensibility via add-ons and support for multiple servers (Jetty, HTTP Kit) provides flexibility.
Common basis for some of otto.de's clojure microservices
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Emphasizes a stripped-down basis that can be extended with add-ons, allowing developers to choose only necessary components, as stated in the project philosophy, reducing bloat.
No server included by default, enabling use of Jetty, HTTP Kit, or no server via separate add-ons, providing freedom for embedded or non-blocking setups without vendor lock-in.
Built-in support for configuration management, health checks, task scheduling, and metrics reporting reduces boilerplate, with examples for Graphite and Prometheus integration in the README.
Supports hot-reloading during development and graceful shutdown for production, enhancing developer productivity and operational reliability with load balancer awareness.
The README explicitly notes it's a work in progress with breaking changes documented in CHANGES.md, leading to potential instability and maintenance overhead.
Essential features like HTTP servers require separate add-ons (e.g., tesla-jetty), increasing initial configuration effort compared to integrated frameworks.
Configuration handling has complexities, such as ENV variables not being merged directly in EDN files and differences with properties files, which can confuse new users.
While extensible via add-ons, the ecosystem is smaller with fewer pre-built integrations compared to alternatives like Duct, potentially requiring custom solutions.