# Production Checklist (/learn/guides/production-checklist)



<Callout type="info">
  Before working this checklist, ground yourself in the [Messaging Patterns Fundamentals](/learn/concepts) — especially [Delivery Guarantees](/learn/concepts/delivery-guarantees), since most production decisions (retries, dead-lettering, idempotency) follow from your chosen delivery semantics.
</Callout>

## Deployment Checklist [#deployment-checklist]

Follow these steps before deploying KubeMQ messaging to production. Each step covers a critical area — complete all that apply to your deployment.

<Steps>
  <Step>
    ### Connection & Security [#connection--security]

    * [ ] TLS enabled for all client connections ([Connect with TLS](/learn/guides/connect-with-tls))
    * [ ] mTLS enabled for zero-trust or multi-tenant environments
    * [ ] Connection timeouts configured to match network conditions
    * [ ] Reconnection logic with exponential backoff implemented ([Error Handling](/learn/guides/error-handling))
    * [ ] Client IDs set to unique, descriptive values for traceability
    * [ ] Authentication tokens rotated and not hardcoded
  </Step>

  <Step>
    ### Observability [#observability]

    * [ ] OpenTelemetry configured for distributed traces and metrics ([OpenTelemetry](/learn/guides/opentelemetry))
    * [ ] Structured logging with correlation IDs linking traces to logs
    * [ ] Alert thresholds set for queue depth, error rates, and latency
    * [ ] Dashboard monitoring KubeMQ server health (CPU, memory, connections)
    * [ ] Log retention policy configured for compliance requirements
  </Step>

  <Step>
    ### Queues [#queues]

    * [ ] Dead letter queues configured for all critical queues ([Dead Letter Queue](/learn/queues/tutorials/dead-letter-queue))
    * [ ] `maxReceiveCount` set to a reasonable retry limit (default 1024 is typically too high)
    * [ ] Visibility timeout set to match expected processing time ([Visibility Timeout](/learn/queues/how-to/visibility-timeout))
    * [ ] Message expiration (TTL) set for time-sensitive work
    * [ ] Retry strategy with exponential backoff implemented
    * [ ] Queue depth monitoring and alerting in place
  </Step>

  <Step>
    ### Events Store [#events-store]

    * [ ] Retention policy configured — time, size, or message count
    * [ ] Storage utilization monitored with alerts before 90% capacity
    * [ ] Durable subscription names set for consumer recovery after restart
    * [ ] Replay strategy documented — consumers know which offset to start from
    * [ ] Storage backend appropriate for workload (memory vs. disk)
  </Step>

  <Step>
    ### RPC (Commands & Queries) [#rpc-commands--queries]

    * [ ] Request timeouts set on all commands and queries — never use infinite timeout
    * [ ] Circuit breaker in place for downstream service failures
    * [ ] Query caching enabled for slow-changing data to reduce responder load
    * [ ] Timeout values documented and agreed upon between caller and responder
    * [ ] Load balancing strategy validated for multi-responder deployments
  </Step>

  <Step>
    ### All Patterns [#all-patterns]

    * [ ] Error handling covers all four categories: validation, connection, timeout, authorization ([Error Handling](/learn/guides/error-handling))
    * [ ] Graceful shutdown implemented — close connections cleanly on SIGTERM
    * [ ] Idempotent message processing where applicable (at-least-once delivery)
    * [ ] Message serialization format agreed upon (JSON, Protobuf, etc.)
    * [ ] Channel naming convention documented and enforced
    * [ ] Load testing completed under expected peak throughput
    * [ ] Disaster recovery plan documented — what happens when KubeMQ restarts
  </Step>
</Steps>

## Quick Reference [#quick-reference]

| Area         | Key Config         | Default              | Recommended                     |
| ------------ | ------------------ | -------------------- | ------------------------------- |
| Connection   | TLS                | Disabled             | Enable in production            |
| Connection   | Reconnect backoff  | None (SDK-dependent) | 1s initial, 30s max             |
| Queues       | Visibility timeout | 60s                  | Match your processing time      |
| Queues       | Max receive count  | 1024                 | 3–5 for most workloads          |
| Queues       | Message expiration | None                 | Set for time-sensitive messages |
| Events Store | Retention          | Unlimited            | Set based on storage budget     |
| RPC          | Request timeout    | 10s                  | Set per operation               |
| All          | Client ID          | Auto-generated       | Set explicitly for tracing      |

## Next Steps [#next-steps]

<Cards>
  <Card title="Connect with TLS" href="/learn/guides/connect-with-tls" description="Secure all client connections." />

  <Card title="Error Handling" href="/learn/guides/error-handling" description="Implement resilient error handling." />

  <Card title="OpenTelemetry" href="/learn/guides/opentelemetry" description="Add distributed tracing and metrics." />

  <Card title="Channel Management" href="/learn/guides/channel-management" description="Manage channels programmatically." />
</Cards>
