πΊοΈ OxMQ Strategic Roadmap (v1.3.0 β v2.0.0+) β
Vision: Elevate OxMQ from 100% BullMQ wire-parity to the standard distributed job queue and durable workflow engine for Java 17+ / Java 21+ and modern polyglot ecosystems.
π― Adoption Thesis & Strategic Goals β
OxMQ v1.0.0 successfully delivered:
- 100% BullMQ v5 wire & functional parity with 49 official Lua scripts.
- Java 17+ LTS baseline with native Java 21 Project Loom Virtual Threads for non-blocking concurrent worker scaling.
- Spring Boot 3 starter with declarative
@OxmqListener,@OxmqBatchListener, and Actuator telemetry. - Microsecond benchmarks and polyglot Bull-Board interoperability.
To drive mass developer adoption across startups and large enterprise organizations, OxMQ is expanding to solve the primary architectural and operational pain points of modern distributed task processing:
- Zero-Infrastructure Dashboard: Eliminating the friction of external Node.js/Docker runtimes by serving an embedded UI directly from the Java application.
- Transactional Outbox Pattern: Guaranteeing atomic state between relational database mutations (PostgreSQL/MySQL) and job queueing in Redis.
- End-to-End Observability: Standardizing on W3C Distributed Tracing and OpenTelemetry across asynchronous queue boundaries.
- AI & LLM Workflows: Purpose-built rate limiting for Token-Bucket constraints (Requests Per Minute + Tokens Per Minute) and streaming progress.
- Modern JVM Runtimes: First-class idiomatic Kotlin Coroutines DSL and Quarkus / GraalVM Native Image AOT compilation.
ποΈ The 4 Strategic Pillars β
π¨ Pillar 1: Zero-Friction Developer Experience (Embedded DX) β
1.1 oxmq-ui: Zero-Node.js Embedded Web Dashboard (oxmq-spring-boot-starter-ui) β
- Problem: Bull-Board requires running an auxiliary Node.js/Docker container, which creates friction in pure Java organizations and local development.
- Solution: A zero-dependency embedded dashboard served directly by Spring Boot (at
/oxmq/uior via Spring Boot Actuator):- Bundled lightweight HTML5 / HTMX web assets inside a single Maven JAR.
- Live queue counters (Wait, Active, Delayed, Completed, Failed).
- Interactive job inspector: View payload, timestamps, progress, and exception stack traces.
- 1-click management: Retry failed jobs, delete jobs, pause/resume queues, and trigger ad-hoc manual jobs.
- DAG workflow visualization for
FlowProducerdependency trees.
1.2 oxmq-testcontainers: Zero-Boilerplate Integration Testing β
- Problem: Setting up clean, deterministic Redis integration tests requires repetitive container setup and queue purging.
- Solution: Dedicated testing library
io.oxmq:oxmq-testcontainers:javaAutomatically manages container lifecycles, purges queues between tests, and provides fluent assertions (@OxmqTest @Testcontainers class OrderWorkerIntegrationTest { @Autowired private OxmqQueue<Order> queue; @Test void shouldProcessJobOnVirtualThread() { Job<Order> job = queue.add("process", new Order("ord_101", 99.0)); await().until(() -> queue.getJobState(job.getId()) == JobState.COMPLETED); } }assertThat(queue).hasActiveJobs(0)).
1.3 oxmq-cli: Interactive Terminal Dashboard (TUI) β
- Solution: A standalone, keyboard-driven terminal dashboard (similar to
k9sorlazygit) distributed via Homebrew, JBang, or native binary:- Real-time event tailing across queues.
- Quick cluster health check and instant queue drains without opening a browser.
π‘οΈ Pillar 2: Enterprise Reliability & Architecture Patterns β
2.1 oxmq-outbox: Native Transactional Outbox Pattern β
- Problem: The classic distributed dual-write hazard:java
@Transactional public void placeOrder(Order order) { orderRepository.save(order); // 1. Saved to relational DB queue.add("send-receipt", order); // 2. Sent to Redis // If payment validation fails or DB commit rolls back, the job STILL runs in Redis! } - Solution: Provide
oxmq-outboxwith Spring@TransactionalEventListenerand JDBC / JPA / R2DBC outbox table support:- Jobs are saved to an
oxmq_outboxrelational table in the same local database transaction. - On transaction commit, a lightweight Loom Virtual Thread dispatcher immediately delivers the job to Redis with sub-millisecond latency.
- Guarantees Atomic Enqueueing: Zero phantom jobs on rollbacks, and zero lost jobs during Redis network blips.
- Jobs are saved to an
2.2 oxmq-tracing: W3C Distributed Tracing & OpenTelemetry β
- Solution: Full distributed trace propagation across asynchronous boundaries:
- Automatically captures W3C
traceparentandtracestateinto job metadata onqueue.add(). - Worker automatically restores the trace context and starts a child span for the job execution.
- Native integration with Micrometer Tracing, OpenTelemetry SDK, Datadog, Jaeger, Zipkin, and Grafana Tempo.
- Allows end-to-end trace visualization from user HTTP request $\rightarrow$ Redis queue $\rightarrow$ Loom Worker $\rightarrow$ Downstream APIs/Databases.
- Automatically captures W3C
2.3 DLQ Intelligent Auto-Triage & Human-in-the-Loop Replay β
- Solution:
- Configurable dead-letter alerting sinks (Slack, Discord, PagerDuty, Webhooks) when a job exhausts all retries.
- Automated exception classification: Groups failures by root cause.
- Payload editing in the UI: Correct malformed inputs and replay without direct database intervention.
π€ Pillar 3: AI & Durable Workflows β
3.1 LLM Token-Bucket Dual Rate Limiter (RPM + TPM) β
- Problem: AI workloads calling LLM providers (OpenAI, Anthropic, Google Gemini, Ollama) must respect two simultaneous rate limits:
- Requests per minute (RPM)
- Tokens per minute (TPM)
- Solution: An AI-native dual sliding-window token bucket in OxMQ:javaIf token capacity is depleted, OxMQ automatically delays the job to the next sliding window without thread blocking or failed attempts.
JobOptions.builder() .rateLimitKey("openai-gpt4") .estimatedTokens(1500) // Consumes 1 request AND 1,500 tokens from the sliding window .build();
3.2 Real-time Progress Streaming (SSE / WebSockets) β
- Solution:
job.updateProgress(chunk)pushes directly to Redis Streams.- Built-in Spring WebFlux / Spring MVC reactive endpoint helper (
oxmq.streamProgress(jobId)) producing Server-Sent Events (SSE) so frontends can render real-time progress bars or token streams.
3.3 Durable Step Functions (Lightweight Sagas) β
- Solution: Evolve
FlowProducerinto an intuitive Step Function API with intermediate state checkpointing:javaIf a worker crashes mid-workflow, only the uncompleted step resumes upon recovery.workflow.step("extract-audio", () -> extractAudio(videoUrl)) .step("transcribe-llm", audio -> transcribe(audio)) .sleep(Duration.ofMinutes(5)) // Checkpointed durable pause .step("notify-completion", transcript -> sendEmail(transcript));
β‘ Pillar 4: Modern JVM Ecosystem Expansion β
4.1 oxmq-kotlin: Idiomatic Kotlin Coroutines & DSL β
- Solution:
- Clean type-safe Kotlin builder DSL:kotlin
val queue = oxmqQueue<Order>("orders") { defaultOptions { attempts = 5 backoff = Exponential(1.seconds) } } oxmqWorker<Order>("orders", concurrency = 50) { job -> // Suspending function! Natively integrates with Kotlin coroutines & Loom processOrderSuspending(job.data) }
- Clean type-safe Kotlin builder DSL:
4.2 quarkus-oxmq & GraalVM Native Image Compilation β
- Solution:
- A first-class Quarkus extension (
quarkus-oxmq) with build-time reflection registration. - Out-of-the-box GraalVM
native-imagecompilation support for both Spring Boot 3 AOT and Quarkus for sub-10ms container cold starts.
- A first-class Quarkus extension (
π Phased Release Horizons β
| Release | Focus Area | Key Deliverables | Status |
|---|---|---|---|
v1.0.0 | Core Foundation & Wire Parity | β’ 49 BullMQ Lua scripts β’ Loom Virtual Threads dispatcher β’ FlowProducer DAGs & Batch dequeueβ’ Spring Boot 3 starter & Bull-Board interoperability | π’ Released |
v1.1.0 | Java 17+ LTS & Scale Hardening | β’ Java 17 LTS baseline + Java 21 Loom graceful fallback β’ Annotation-driven @OxmqListener, @OxmqBatchListener, @OxmqHandlerβ’ 10,000-node DAG scale benchmarks & memory inflection analysis β’ Dedicated Spring Boot 3 Java 17 showcase module | π’ Released |
v1.2.0 | 100% BullMQ v6 Parity & Pluggable Backends | β’ Official BullMQ v6.3.15 Lua scripts parity (49/49 verified scripts) β’ Pluggable QueueBackend architecture (RedisQueueBackend)β’ DelayedException for dynamic in-flight job delaysβ’ Custom retry backoff strategies ( CustomBackoffStrategy)β’ Child job dependency options ( failParentOnFailure, removeDependencyOnFailure) | π’ Released |
v1.3.0 | Native Context Isolation & BullMQ Parity | β’ Native Context Isolation & Service-level Namespacing (OxmqContextHolder, multi-tenant prefixing)β’ Synchronous & Async Request-Reply ( waitUntilFinished via isFinished-3.lua)β’ Advanced Job Retention ( KeepJobs count, ageSeconds, limit)β’ Full JobState enum inspection & FlowProducer.addBulk batch DAG treesβ’ Dynamic QueueEvents.off unregistration & Unified Bull-Board isolation | π’ Released |
v1.4.0 | In-Flight Cancellation & Scale Hardening | β’ In-Flight Job Cancellation (AbortController / Thread.interrupt() parity via CancellationToken)β’ Redis Cluster DAG Hash-Tagging ( FlowProducer.forCluster to prevent CROSSSLOT)β’ Memory Safeguards for Batch Consumers ( maxBatchBytes heap budget)β’ Batched multi-job lock extensions via extendLocks-1.luaβ’ Elimination of Java 21 Loom carrier-thread pinning ( ReentrantLock)β’ RateLimitException conforming to BullMQ RateLimitError | π’ Released |
v1.5.0 | Plugins & Multi-Tenant Quota Governance | β’ JobInterceptor SPI (beforeProcess, afterProcess, onError) with zero Lua changesβ’ GroupRateLimiterPlugin (dynamic token bucket per tenant/group)β’ RateLimitSentinelPlugin (HTTP 429/503 circuit-breaker cooldown sentinel)β’ PriorityQuotaGovernorPlugin (headroom-based yielding)β’ Pre-provisioned Grafana Dashboards & Prometheus Telemetry β’ OxDoc 365 Enterprise Document AI Showcase (5 tenant tiers) | π’ Released |
v1.6.0 | Adaptive Rate Limiting & Cloud Resilience | β’ Native AdaptiveRateLimiterPlugin (AIMD dynamic capacity)β’ Distributed CheckpointStatePlugin (cursor/delta resume)β’ Standalone mock-office365-server Cloud Chaos Engineβ’ Production Kubernetes manifests & Clean-slate disaster recovery benchmark | π’ Released |
v1.7.0 | 100% BullMQ Parity & Distributed Tracing | β’ Queue pagination & state inspection (getJobs, getJobCounts)β’ Programmatic job.discard() & ignored children failuresβ’ Pluggable BackoffStrategy.custom() registryβ’ Global queue concurrency & rate limits ( setGlobalConcurrency, setGlobalRateLimit)β’ Worker lifecycle event emitters ( onActive, onCompleted, etc.)β’ OpenTelemetry W3C distributed tracing ( TraceContext)β’ Upstream BullMQ Lua deduplication sync & Enterprise docs overhaul | π’ Released |
v1.8.0 | Bull-Board Telemetry & Automated Queue Pruning | β’ Full OpenTelemetry trace propagation into Bull-Board Data, Options, and Logs tabs β’ Standard opts.telemetry map parity with BullMQβ’ Automated completed-job Redis pruning via removeOnComplete & Dead-Letter retentionβ’ Modern Material Design UI & Real-Time SSE Streaming for OxDoc 365 showcase β’ Redis Exporter & Enhanced System Metrics Dashboards in Grafana β’ Enterprise 100k+ file multi-tenant stress testing & zero memory leaks | π’ Released |
v1.9.0 | Enterprise Reliability & Outbox | β’ oxmq-outbox (Transactional Outbox for Spring/JPA)β’ DLQ Webhook / Slack Alerts & Human-in-the-loop replay β’ Valkey 8 certification & Prometheus Grafana expansions | βͺ Planned |
v2.0.0 | Kotlin & Cloud-Native | β’ oxmq-kotlin Coroutines DSLβ’ GraalVM Native Image (AOT) hints & verification β’ Quarkus Extension exploration | βͺ Planned |
v2.1.0 | AI Orchestration & Sagas | β’ AI Dual-Rate Limiter (RPM + TPM token buckets) β’ SSE Progress Streaming endpoints β’ Durable Checkpointed Step Sagas | βͺ Planned |
π€ Community Feedback & Contributions β
Have thoughts or additional requirements?
- Open a feature discussion on GitHub Discussions.
- Check the Contributing Guide to get involved.