Horus is the administration service of Anjana Data Platform. It is a Spring Boot application that integrates three Spring Cloud components into a single service:
-
Spring Cloud Config Server: serves the centralized configuration for all Anjana microservices.
-
Eureka Server: acts as a service registry (service discovery) so microservices can locate each other.
-
Spring Boot Admin: provides monitoring and administration of the registered microservices.
Horus is, therefore, the central piece that the rest of Anjana's services depend on to start up correctly: without Horus available, a microservice cannot obtain its configuration or register to be discovered by the others.
For details on how to configure each configuration repository (Filesystem, Git, HashiCorp Vault, database, or AWS Secret Manager) see Advanced configuration of services and components. For detailed Vaults and Secret Manager configuration, see Vaults.
Internal architecture
Spring Cloud Config Server
This is the component that centralizes the configuration of all Anjana microservices. Each microservice (Kerno, Minerva, Hermes, Viator, Portuno, Tot, Drittesta, Zeus) obtains its configuration at startup by making a request to Horus, instead of reading it from a local file.
Horus supports several types of repository as the source of that configuration, and can combine several at once via the spring.cloud.config.server.<repository>.order property (lower value = higher priority):
-
Filesystem: Horus's native profile, reads from a local folder on the server where Horus is deployed.
-
Git: remote Git repository, configurable by branch.
-
HashiCorp Vault: external secrets repository, see Vaults.
-
Database:
app_configurationtable in the Portuno schema. -
AWS Secret Manager: Horus loads its own configuration from Secrets Manager, see Advanced configuration of services and components.
⚠️ Important: Horus is the only service that cannot use another Horus to obtain its own configuration (it cannot configure itself via spring.config.import=configserver:...). To configure Horus you must choose directly one of the repositories above (Filesystem, Git, Vault, database, or AWS Secret Manager).
Every microservice that consumes configuration from Horus needs the following argument in its service descriptor:
--spring.config.import=optional:configserver:http://<Horus host>:9999/config
Eureka Server
Horus also acts as a service discovery server (Eureka). The Anjana microservices that register with Horus are: Kerno, Minerva, Hermes, Viator, Portuno, Tot, Drittesta and Zeus.
Each of them must point to Horus's Eureka URL via the property:
eureka:
client:
serviceUrl:
defaultZone: http://<Horus host>:9999/eureka
Registration in Eureka is what enables load balancing between instances of the same microservice and lets services locate each other without needing to hardcode IPs or hostnames.
Spring Boot Admin
Spring Boot Admin provides a monitoring and administration dashboard for the microservices registered with Horus: health status, JVM metrics, live log levels, and other information exposed by Spring Boot Actuator on each microservice.
The dashboard is available on the same port 9999 as Horus, under the path /admin.
Horus high availability
It is possible to deploy several Horus instances to provide high availability for the configuration and discovery service. This is controlled via the HORUS_REPLICAS environment variable, with a comma-separated list of hosts, which translates to:
eureka:
client:
serviceUrl:
defaultZone: http://<Horus host1>:9999/eureka,http://<Horus host2>:9999/eureka
Equivalently, each microservice can point to several Horus instances for configuration by adding several comma-separated URLs at startup:
--spring.config.import=optional:configserver:http://<Horus host1>:9999/config,optional:configserver:http://<Horus host2>:9999/config
📝Note: in the current version there is no auto-purging of down configuration servers: if one of the configured Horus instances becomes unavailable, it is not automatically removed from the list.
Ports and endpoints
|
Component |
Port |
Path |
|---|---|---|
|
Spring Cloud Config Server |
9999 |
/config |
|
Eureka Server |
9999 |
/eureka |
|
Spring Boot Admin |
9999 |
/admin |
Related references
-
Advanced configuration of services and components: YAML details for each configuration repository, load balancing, and other technical parameters.
-
Vaults: detailed configuration of HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager, and Azure Key Vault.