Balancing Reliability and Performance

Reliable messaging is implemented in a variety of ways: through the
use of persistent messages, acknowledgments or transactions, durable subscriptions,
and connection failover.

In general, the more reliable the delivery of messages, the more overhead
and bandwidth are required to achieve it. The trade-off between reliability
and performance is a significant design consideration. You can maximize performance and throughput by choosing to produce and consume nonpersistent
messages. On the other hand, you can maximize reliability by
producing and consuming persistent messages in a transaction using a transacted
session. For a detailed discussion of design options and their impact on performance,
see Factors Affecting Performance.