-
Notifications
You must be signed in to change notification settings - Fork 0
Server Configuration
Everything below is real configuration from
evento-server/src/main/resources/application.properties
and BusProperties. Spring's relaxed binding applies, so evento.server.bus.port can equally be set
as the environment variable evento_server_bus_port.
| Port | Property | Purpose |
|---|---|---|
| 3000 | server.port |
HTTP — GUI and REST API |
| 3030 | evento.server.bus.port |
Netty message bus — where bundles connect |
Bound by the BusProperties record (@ConfigurationProperties(prefix = "evento.server.bus")).
The bus is opt-in: evento.server.bus.enabled=true (the shipped application.properties sets it).
| Property | Default | Notes |
|---|---|---|
enabled |
(set to true in the shipped config) |
Master switch |
port |
3030 |
Bus listen port |
server-instance-id |
server-<random UUID> |
Blank/absent generates one |
correlation-check-interval |
1s |
Expiry sweep for pending correlations |
shutdown-deadline |
30s |
Bounded graceful stop |
heartbeat-write-idle |
15s |
Send a Ping after this much write idle |
heartbeat-read-idle |
45s |
Close the channel after this much read idle |
connect-timeout |
5s |
|
max-frame-length |
16 MB |
Per-chunk memory, not a message size limit — see Wire Protocol § 3 |
write-buffer-high-water-mark |
1 MB |
Channel transitions to DEGRADED above this |
write-buffer-low-water-mark |
256 KB |
Must be strictly less than the high mark, or startup throws |
business-executor-core-size |
max(8, cores × 2) |
|
business-executor-max-size |
cores × 8 |
Clamped up to at least the core size |
business-executor-queue-capacity |
256 |
Do not enlarge to absorb load — see Throughput and Capacity |
business-executor-keep-alive |
90s |
|
business-executor-saturation-warn-interval |
10s |
Rate-limits the saturation WARN line |
auth-token |
(empty) | Empty accepts all bundles; set a shared secret to require it |
| Property | Default | Purpose |
|---|---|---|
evento.es.mode |
APES in code, CPES in the shipped properties |
Event store mode |
evento.es.fetch.concurrency |
4 |
Fair semaphore in EventStoreRequestHandlerBridge
|
evento.es.fetch.delay |
69 |
ms between fetch cycles |
evento.es.aggregate.state.cache.size |
1024 |
Snapshot cache entries |
evento.es.aggregate.state.cache.expiry |
150000 |
ms |
evento.es.aggregate.events.cache.size |
1024 |
Event cache entries |
evento.es.aggregate.events.cache.expiry |
150000 |
ms |
evento.es.fetch.concurrencyis very likely the binding constraint on a consumer-heavy cluster. It is a fair semaphore, so no amount of bus threads raises it. It is deliberately left at 4: it guards heap against concurrentEventFetchRequestresult sets, and the OOM it was added for is real. Raise it against measured headroom, not on principle.
spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/evento}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:postgres}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:secret}
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.sql.init.mode=alwaysHikari keepalive/timeout settings ship as
spring.datasource.hikari.data-source-properties.{tcpKeepAlive,loginTimeout,connectTimeout,socketTimeout}.
Two independent surfaces:
# GUI + REST (HTTP Basic)
spring.security.user.name=${SPRING_SECURITY_USER_NAME:evento}
spring.security.user.password=${SPRING_SECURITY_USER_PASSWORD:secret}
spring.security.user.roles=WEB,ADMIN
# Wire-level bundle auth — blank accepts all bundles (dev only)
evento.server.bus.auth-token=${EVENTO_SERVER_BUS_AUTH_TOKEN:}Both default to development-grade values.
secretas a password and a blank bundle auth token are fine on a laptop and unacceptable anywhere else. See Security Model.
| Property | Shipped value | Purpose |
|---|---|---|
evento.cluster.name |
evento-server |
Cluster display name |
evento.performance.capture.rate |
1 (compose file uses 0.1) |
Fraction of invocations sampled |
evento.telemetry.ttl |
365 |
Retention, days |
spring.servlet.multipart.max-file-size |
200MB |
|
spring.mvc.async.request-timeout |
3000000 |
Actuator exposure:
management.endpoints.web.exposure.include=health,info,prometheus,metrics
management.endpoint.health.probes.enabled=true
management.endpoint.health.show-details=when_authorized
management.health.livenessstate.enabled=true
management.health.readinessstate.enabled=truePublished as eventoframework/evento-server on
Docker Hub. The image is a two-stage build
on digest-pinned eclipse-temurin:25 (JDK to build, JRE to run), exposing 3000 and 3030:
FROM eclipse-temurin:25-jdk-noble@sha256:29d2d8af… AS build
WORKDIR /evento
COPY . .
RUN chmod +x gradlew && ./gradlew :evento-server:bootJar --no-daemon
FROM eclipse-temurin:25-jre-noble@sha256:b27ca476…
EXPOSE 3000
EXPOSE 3030
RUN mkdir /app
COPY --from=build /evento/evento-server/build/libs/*.jar /app/spring-boot-application.jar
ENTRYPOINT ["java","-jar","/app/spring-boot-application.jar"]Compose files in the repository:
| Path | What it runs |
|---|---|
docker/evento-docker-compose/docker-compose.yaml |
Server + Postgres — the normal way to run Evento |
docker/evento-local/docker-compose.yaml |
Postgres only, for running the server from an IDE |
The framework does not manage instance lifecycle. There is no deploy-by-upload, no /spawn or
/kill, and no autoscaling protocol — all of that was removed in 2.0. The server emits performance
metrics; your orchestrator (k8s, Nomad) owns scaling and restarts. See
Migrating from v1.
- Throughput and Capacity — how to choose the executor numbers above
- Security Model — hardening the two auth surfaces
- Observability — what to scrape once it is running
Evento Framework — Copyright 2020–2026 © Gabor Galazzo. Dual-licensed under AGPL-3.0 and a commercial licence.
This wiki documents the implementation; the repository is authoritative where the two disagree. Found something out of date? Open an issue.
Getting oriented
Internals
Operations
- Server Configuration
- Throughput and Capacity
- Observability
- Security Model
- Server REST API
- Troubleshooting
Project