There are several different mechanisms that you can use to stop messaging engines. You can also specify two different degrees of urgency: immediate and force. Stopping a messaging engine prevents it from sending messages.
For each existing connection, the messaging engine waits for the current operation to complete, unless the operation blocks processing in the messaging engine, such as a receive operation. In this case, the operation is interrupted. Asynchronous consumers are allowed to complete even though they might take an arbitrary amount of time to process the current message. The messaging engine then backs out of active transactions and disallows further operations on that connection. When all connections are in this invalidated state, the messaging engine stops.
Force mode is like immediate mode, except that stopping the messaging engine interrupts messaging operations on application threads that are taking place at the time that the stop command is issued. Rather than allowing existing messaging operations to complete, the messaging engine interrupts them and then disallows further operations. When all connections are in this state, the messaging engine stops.
Force mode completes the shutdown of the messaging engine as fast as possible. A subsequent restart of the messaging engine might take longer than if it had been stopped using immediate mode, because more recovery actions are needed. For example, force mode stop can leave messages with indoubt transactions and you must deal with these messages as described in Resolving indoubt transactions.
You can escalate an immediate stop that is taking too long to force a stop.
Stop mechanism | Immediate | Force |
---|---|---|
Administrative console | Yes | Yes |
JMX stop command | Yes | Yes |
stopServer command | Yes | No |