Mechanisms for stopping messaging engines
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.
- Using the administrative console to stop the messaging engine
- Using The JMX stop command
- Using the stopServer command to stop the application server that hosts the messaging engine
- Immediate
- In immediate mode, the messaging engine is stopped on completion
of all the messaging operations that are current at the time of the
stop request. No notification is sent to the application to indicate
that the messaging engine is stopping. After a stop command
has been issued, the messaging engine does not allow new operations
to be started.
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
- In force mode, the messaging engine is stopped so that any current
transactions are pre-empted and applications are forcefully disconnected.
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 |