BOOST.Dispatcher
A multi-tenant job dispatch and processing system that routes messages from an AMQP queue to various handlers including email delivery, PDF generation, and MQTT-based data synchronization.
Architecture
ActiveMQ Queue → PersonalDispatcher.onMessage()
↓
DispatcherJob.parse()
↓
(jobType routing)
↓
┌────────────┼────────────┐
↓ ↓
documentAction mqttCRUD
↓ ↓
PDFJobFactory MQTTService
↓
SysJobsRecord
↓
EmailJob (Quartz)
↓
MailProviderFactory
↓
(SMTP / Mailgun / SES / SendGrid)Multi-Tenancy
- Each tenant gets its own
PersonalDispatcher, Quartz scheduler, and database connection - Messages are filtered by
tenantUUIDJMS property - MQTT topics are hashed per-tenant using MD5
DispatcherBossorchestrates dispatcher creation for all tenants
Prerequisites
- Java (Maven project)
- AMQP Message Broker (e.g., RabbitMQ)
- MQTT Broker
- MySQL Database (per-tenant + master)
- ImageMagick (for PDF-related operations via BOOST.PDFBuilder)
Configuration
config.properties
dispatcher_queue_name=boost.dispatcher.jobs
broker_url=amqp://172.16.200.32:5672
mqtt_host=tcp://172.16.200.158:1883
mqtt_username=BOOSTDispatcher
mqtt_password=****quartz.properties
Quartz is configured with JDBC job store for persistent job scheduling.
hikari-*.properties
Multiple HikariCP connection pool configurations for master and tenant databases.
Job Types
documentAction
Generates a PDF from a template and sends it via email.
Flow:
- Fetches job definition from
sys_jobstable - Retrieves template from
sys_templates - Generates PDF using BOOST.PDFBuilder
- Resolves email recipients from
sys_mail_destinations - Sends email via configured provider
- Updates job status in
sys_jobqueue
Job lifecycle: PENDING → COMPLETED / FAILED
mqttCRUD
Publishes data change notifications to MQTT topics.
MQTT Topic format: BOOST/{tenant_hash}/{tableName}
Message Format
Incoming JMS Message
{
"jobType": "documentAction | mqttCRUD",
"userUUID": "uuid-string",
"tenantUUID": "tenant-uuid",
"body": { }
}Email Providers
| Provider | Status | Implementation |
|---|---|---|
| SMTP | Implemented | Generic SMTP with TLS/auth |
| Mailgun | Implemented | REST API via OkHttp |
| SendGrid | Placeholder | Not yet implemented |
| AWS SES | Placeholder | Not yet implemented |
Provider configuration is stored per-tenant in the sys_mail_providers database table.
Checksum Sync System
A periodic background process (every 5 minutes via ChecksumPingJob) that:
- Queries entity tables for row counts, max timestamps, and XOR-based checksums
- Publishes checksums via MQTT to topic
BOOST/{tenant_hash}/sync/ping - Clients compare local checksums to detect stale data
- Clients request full sync when checksums don't match
Entities tracked: items, work_orders, persons, organizations (and others)
Database Tables
| Table | Purpose |
|---|---|
sys_jobs | Job definitions and templates |
sys_job_data | Job execution data |
sys_templates | PDF/email templates |
sys_mail_destinations | Email recipient configuration |
sys_mail_providers | Per-tenant email provider settings |
sys_jobqueue | Job execution status tracking |
QRTZ_* | Quartz scheduler persistence tables |
Dependencies
| Dependency | Version | Purpose |
|---|---|---|
quartz | 2.3.2 | Job scheduling |
jooq | 3.19.6 | Type-safe SQL |
qpid-jms-client | 2.5.0 | AMQP messaging |
paho.mqtt | 1.2.5 | MQTT publishing |
HikariCP | 5.1.0 | Connection pooling |
jakarta.mail | 2.0.1 | Email sending |
okhttp | 4.12.0 | HTTP client (Mailgun API) |
pdfbox | 3.0.2 | PDF handling |
BOOST.PDFBuilder | internal | PDF generation from templates |
BoostMiddleware | internal | Shared BOOST utilities |
Project Structure
src/main/java/com/luqon/dispatcher/
├── main/
│ ├── ScheduledSender.java # Entry point
│ ├── DispatcherBoss.java # Multi-tenant orchestrator
│ ├── PersonalDispatcher.java # Per-tenant message listener
│ ├── DispatcherJob.java # Job model
│ ├── DispatcherJobType.java # Job type enum
│ ├── DataSourceInitializer.java # Tenant DB initialization
│ ├── CustomerDataSource.java # Tenant data wrapper
│ └── ActiveMQService.java # JMS connection management
├── email/
│ ├── EmailJob.java # Quartz job for sending email
│ ├── MailProvider.java # Provider interface
│ ├── MailProviderFactory.java # Provider factory
│ ├── MailProviderType.java # Provider enum
│ ├── providers/
│ │ ├── SmtpProvider.java
│ │ └── MailgunProvider.java
│ └── config/
│ ├── MailProviderConfig.java
│ ├── SmtpConfig.java
│ └── MailgunConfig.java
├── PDF/
│ ├── PDFJobFactory.java # Job creation & scheduling
│ └── JobQueueService.java # Job lifecycle tracking
├── mqtt/
│ └── MQTTService.java # MQTT publishing
├── sync/
│ ├── EntitySyncService.java # Checksum generation
│ └── ChecksumPingJob.java # Periodic sync ping
└── utils/
├── ChecksumUtils.java # Hashing utilities
└── SimpleCrypto.java # Crypto operationsRunning the Service
java -cp target/classes com.luqon.dispatcher.main.ScheduledSender