Appendices
Seven optional deep-dives: WebSockets.Next at scale, gotchas, agentic development notes, testing in depth, in-memory messaging versus Kafka, the three orchestration engines compared, and running on OpenShift Local.
Appendix: scaling WebSocket push with Kafka
Why notification-service's single-process WebSocket push would break across more than one replica, and how Kafka-backed fan-out across per-replica consumer groups fixes it.
Gotchas and things to look out for
Eight pitfalls hit while building this project, each with its symptom, root cause, and the fix applied in this repository's code.
Agentic development recommendations
Guidance for AI-agent-assisted development on a Quarkus/Camel codebase: where it helps, where it does not, the plan/execute/validate relay, and the MCP tooling that grounds agents in the real catalog and docs.
Testing, in detail: the full pyramid and the single-entry runner
A ground-up walk through this project's test pyramid — @QuarkusTest unit tests, failsafe *IT integration tests on self-provisioned Testcontainers, the Newman functional collection, and hey/ghz load passes — tied together by scripts/run-all-tests.sh.
In-memory (Vert.x) messaging vs. Kafka
Vert.x in-memory messaging and Kafka compared: the SmallRye Reactive Messaging in-memory connector used in tests and the Kafka connector used in %prod run the same @Incoming/@Outgoing code over two transports, with the limits of what the in-memory connector can stand in for.
Appendix: the three orchestration engines, compared in depth
Kafka choreography, Camel orchestration, and Quarkus Flow orchestration compared over the same order-triage domain: coupling, failure handling, debuggability, where logic lives, testing, and operational cost.
Appendix: running on OpenShift Local (CRC)
The seven Quarkus services, Kafka, Postgres and Apicurio on OpenShift Local, then the platform tier: Service Mesh 3 with a canary, the Custom Metrics Autoscaler, OpenTelemetry tracing, the AI services, a native build and GitOps, all built and verified inside the cluster, with a teardown that leaves it clean.