![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
避免非 ASF 方式中的事务超时
如果您的系统以非应用程序服务器设施(非 ASF)方式运行,那么必须正确配置事务生存期超时总计事务服务属性和 NON.ASF.RECEIVE.TIMEOUT 消息侦听器服务定制属性,才能避免不需要的事务超时。
开始之前
要执行本任务中的步骤,您的消息传递系统必须以非 ASF 方式运行。要从 ASF 方式更改为非 ASF 方式,请根据配置消息侦听器服务中所述,将 NON.ASF.RECEIVE.TIMEOUT 定制属性添加到消息侦听器服务。
关于此任务
对于 WebSphere® Application Server V7 和更高版本,已稳定侦听器端口。有关更多信息,请参阅有关固定功能的文章。您应进行规划,以便将 WebSphere MQ 消息驱动的 Bean 部署配置由使用侦听器端口迁移为使用激活规范。有关如何为非 ASF 方式配置激活规范的更多信息,请参阅为非 ASF 方式配置激活规范。但是,仅当您确定此应用程序不必在版本低于 WebSphere Application Server V7 的应用程序服务器上工作时,您才能开始此迁移。例如,如果应用程序服务器集群中某些成员的版本为 V6.1,而某些成员为更高版本,那么仅当您将该集群中的所有应用程序服务器都迁移到此更高版本之后,才能迁移该集群上的应用程序以使用激活规范。
如果消息传递系统在非 ASF 方式中运行,要避免不需要的事务超时,那么必须设置足够的时间,以便在达到事务生存期超时总计之前可以完成处理。因此,必须确保为 NON.ASF.RECEIVE.TIMEOUT 消息侦听器服务定制属性指定的值小于为事务生存期超时总计事务服务属性指定的值,并且这两个属性值的差大于消息驱动 bean (MDB) 的 onMessage() 方法处理消息所花费的时间。
过程
- 要配置事务生存期超时总计事务服务属性,请完成配置应用程序服务器的事务属性中的步骤 8。
- 要配置 NON.ASF.RECEIVE.TIMEOUT 消息侦听器服务定制属性,请单击 。
- 单击 NON.ASF.RECEIVE.TIMEOUT。 将显示常规属性页面。
- 修改值字段。 必须以毫秒为单位指定 NON.ASF.RECEIVE.TIMEOUT 的值。请确保如果将您指定的值转换为秒(除以 1000),转换后的值应小于为事务生存期超时总计指定的值,并且这两个属性值的差应大于 MDB onMessage() 方法处理消息所花费的最大秒数。
- 单击确定。
- 停止并重新启动应用程序服务器。
示例
如以下示例所示,如果未正确配置事务生存期超时总计和 NON.ASF.RECEIVE.TIMEOUT,那么事务可能会在它们完成之前超时。这是因为线程在事务创建后立即开始调用 receive() 方法。在以下示例中,NON.ASF.RECEIVE.TIMEOUT 设置为 110000 毫秒(110 秒),事务生存期超时总计设置为 120 秒,MDB 的 onMessage () 方法花费 15 秒来处理一条消息。该示例假设直到 receive() 方法即将超时时才在目标上出现一条消息。
- 侦听器端口启动并从线程池中分配一个线程,然后在该线程上创建一个事务。
- 线程调用 receive() 方法以侦听消息。
- 经过 10 秒后,在目标上出现一条消息。
- 线程将消息从目标中移除,并调用 MDB onMessage() 方法,以开始处理该消息。
- 经过 10 秒后,达到事务超时。应用程序服务器对该事务进行标记以执行回滚。
- 经过 5 秒后,onMessage() 方法结束了对消息的处理,并尝试落实该事务。
- 从该事务启动以来经过的总时间为 125 秒(110 秒用于等待消息,加上处理消息用了 15 秒)。因为这一时间长于事务超时,所以应用程序服务器会禁止落实该事务,该事务将回滚。