There are several ways to configure a JMS messaging scheme based on the level of reliability desired. The chosen configuration directly affects system performance.
In general, trading reliability for performance is one way to improve system throughput. But make no mistake: It's a dangerous game to play when the messages are important. If the nature of your application is such that consumption of every message is critical, there's no avoiding the reliability controls that JMS provides.
There are two major controls in the reliability versus performance debate: client acknowledgment and message persistence.
When JMS messages are sent, they can be part of a transaction or not, that is, nontransacted. ...