示例 4:未指定异常目标时自动停止 MDB
要为系统资源不可用的情况或问题消息做好准备,请配置系统以自动停止消息驱动的 Bean (MDB)。为保留消息排序,请不要使用异常目标。
开始之前
MDB 侦听的目标不得使用异常目标,即,队列或主题空间目标的异常目标必须配置为“无”。
要完成此任务,您需要以下信息:
- 包含 MDB 的企业应用程序。
- 相关外部系统资源。
- 连续失败消息阈值的值为 1。这是最大消息传送连续失败数,在此之后 MDB 会停止。此属性适用于消息集。注: 异常目标配置为“无”时,如果此属性设置为大于 1 的值,那么系统会自动将其重置为 1。
- 失败消息重试之间的延迟的值设置为 5000,即,可将失败消息传送至 MDB 之前的时间(以毫秒计)。除非连续失败消息阈值和最大并行度设置为 1,否则在此时间段内可能会传送其他消息。
- 每个消息的最大失败传递次数的可接受值,即,尝试处理消息的最大失败次数。此属性适用于个别消息。
JCA MBean 会发出 JMX 通知以指示 MDB 已暂停,并且 MDB 已恢复。考虑在 JCA MBean 上注册消息侦听器以接收 JMX 通知。
关于此任务
在此方案中,企业应用程序是持续运行的系统,此系统使用已部署 MDB 来访问外部系统资源。
遇到问题消息(在此方案中为 msg1)时,会将它放回到队列上。
msg1 将在失败消息重试之间的延迟重试延迟期间(在此方案中为 5 秒)隐藏,而不是立即对 MDB 可用。
隐藏的消息数达到连续失败消息阈值时,MDB 将不会处理其他任何消息,直到其中一个隐藏消息重新变为可用。在此方案中,一旦 msg1 被隐藏就达到此阈值。
msg1 的失败消息重试之间的延迟到期时,会显示 msg1 并对其进行重新处理。
此过程会一直重复,直到 msg1 达到其每个消息的最大失败传递次数限制(在此方案中为 5 次)。
msg1 第 4 次显示,回滚并再次隐藏后,达到连续失败消息阈值并且 MDB 自动停止。JCA MBean 会发出 JMX 通知,并且日志条目会向系统管理员发出 MDB 已停止的警报。