New to Kestra?
Use blueprints to kickstart your first workflows.
Triage Solace PubSub+ dead-letter queue backlogs, safely re-publish recoverable messages, and isolate poison pills with Kestra.
Enterprise event meshes running on Solace PubSub+ rely on Dead Letter Queues (DLQs) to capture unprocessable or rejected events. When transient failures like microservice restarts or temporary database lockups occur, messages can safely be replayed. However, blindly replaying an entire DLQ risks unleashing toxic poison pills that crash downstream consumers repeatedly in an infinite retry storm.
This blueprint implements an automated Dead-Letter Triage and Safe Replay Gate. It bounds DLQ draining into manageable batches, classifies the volume against a configurable safety ceiling, safely re-publishes recoverable messages back to active ingress topics with persistent delivery guarantees, and automatically isolates catastrophic surges into an offline quarantine topic while paging on-call responders.
solace_dlq_event_trigger (io.kestra.plugin.solace.Trigger) polls the specified Solace dead-letter queue for pending messages, initiating event-driven remediation. A secondary schedule (dlq_triage_schedule_backup) acts as a time-based backstop.consume_dead_letter_batch (io.kestra.plugin.solace.Consume) connects over the native Solace SMF protocol, draining up to max_batch_size JSON messages from the DLQ into internal Kestra storage (.ion serialized records).classify_batch_status (io.kestra.plugin.core.debug.Return) evaluates the drained message count against backlog_quarantine_ceiling. It resolves to EMPTY_DLQ if clear, RECOVERABLE_BATCH if within safe replay bounds, EXCESSIVE_POISON_SURGE if volume breaches safety thresholds, or DRAIN_FAILED on communication loss.route_by_triage_decision (io.kestra.plugin.core.flow.Switch) executes branch-specific operations:RECOVERABLE_BATCH: Invokes replay_messages_to_active_topic (io.kestra.plugin.solace.Produce) to re-publish the batch to target_replay_topic with deliveryMode: PERSISTENT.EXCESSIVE_POISON_SURGE: Halts auto-replay, isolates the batch to quarantine_topic via quarantine_poison_batch (io.kestra.plugin.solace.Produce), and alerts Slack via alert_quarantine_surge (io.kestra.plugin.slack.notifications.SlackIncomingWebhook).EMPTY_DLQ: Logs a clean health confirmation.DRAIN_FAILED: Alerts Slack of broker or queue binding failures.log_audit_summary (io.kestra.plugin.core.log.Log) writes a persistent audit record documenting execution ID, queue name, message counts, and triage outcome.errors block catches any unexpected orchestration failures and notifies engineering.PERSISTENT messaging delivery.Manual dead-letter handling through broker admin UIs is slow, error-prone, and lacks auditable guardrails. Custom consumer scripts often lack state tracking, retry mechanics, and alerting. Orchestrating with Kestra provides declarative topology definitions, native Solace event triggers, secure credential isolation, visual audit trails, and automatic Slack escalation within a single unified workflow.
55555).orders.dlq) and corresponding target topics (orders/incoming/replayed, orders/quarantine/poison).SOLACE_USERNAME: Username for authenticating with the Solace Message VPN.SOLACE_PASSWORD: Password for the Solace client username.SLACK_WEBHOOK_URL: Slack incoming webhook URL used for incident notifications and unhandled error alerts.SOLACE_USERNAME, SOLACE_PASSWORD, and SLACK_WEBHOOK_URL in your Kestra namespace secrets.docker run -d -p 8080:8080 -p 55555:55555 --shm-size=1g --name=solace solace/solace-pubsub-standard:latestinputs.dlq_name matches your broker's dead-letter queue.triggers.solace_dlq_event_trigger to activate continuous automated triage.EXCESSIVE_POISON_SURGE events.