如何让JBoss EAP优雅停止轮询新消息并安全下线维护?
JBoss EAP 7 安全下线(JMS消费场景)
操作步骤
1. 暂停新消息接收
针对消息驱动Bean(MDB)场景
- 连接目标服务器的JBoss CLI,执行命令暂停对应MDB部署或端点:
- 暂停整个MDB部署:
deploy --name=your-mdb-app.war --disable - 暂停单个MDB:
/subsystem=ejb3/mdb=YourTargetMDB:stop()
- 暂停整个MDB部署:
针对自定义JMS消费者场景
- 调用应用内置的停机触发逻辑(如JMX操作、内部接口),执行
consumer.stop()停止新消息拉取,保留JMS连接直到现有消息处理完成。
2. 验证已处理消息完成
- 查看服务器业务日志,确认所有已接收的IN队列消息对应的业务逻辑执行完毕,且响应消息已成功发送至OUT队列。
- 通过JBoss CLI监控队列状态,确认无待处理消息:
/subsystem=messaging-activemq/server=default/queue=your-IN-queue:read-attribute(name=message-count) - 检查事务状态,确保所有JMS事务已提交/回滚,无未完成的事务残留。
3. 执行优雅停机
- 确认所有任务完成后,通过JBoss CLI发送优雅停机指令:
shutdown --timeout=600
该指令会预留最长10分钟(600秒)让服务器完成剩余处理,超时后自动终止。
关键注意事项
- 多组IN/OUT队列需逐一对应处理,确保每组的消费者都已暂停且消息处理完成。
- 若使用事务型消费,必须等待所有事务闭环后再执行停机,避免消息丢失或重复消费。
内容的提问来源于stack exchange,提问作者Malaiselvan
相关产品推荐
相关产品推荐

