![]() |
WebLogic Integration 中的消息丢失 |
| 问题描述 在使用 WLI 的每种集成情况中,WLI 都会向其周围的各种应用程序发送消息或接收来自它们的消息。这些消息还会以异步方式通过 WLI 内部的各种组件。当要求的作业未得到执行(如未调用 JPD、向外部系统发送的消息数与要求的不一致)时,就可能发生了消息丢失。由 WLI 发送给其它系统的消息数可能会与 WLI 接收的消息数不一致,因为有些消息可能在内部使用了,并且有些消息则可能基于应用程序逻辑被拆分成了多个消息。本模式有较多的帮助在跟踪这些消息及使用一些最佳的配置经验避免这些消息。 本模式仅适用于使用任何 Service Pack 的 WLI 8.1。 |
| 故障排除 请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。 快速链接 为什么发生此问题? 消息进入 WLI 后,会以异步方式通过各种组件(B2B、Message Broker、JPD、Application Integration 和 Controls)。在某些情况下,由于配置不当、异常、网络故障或数据库故障,某些组件将不可用,消息可能因此被困在内部队列中或重新发送尝试次数达到了上限 ( http://edocs.bea.com/wls/docs81/jms/implement.html#1255066 (English)),并被发送到错误队列,后来在某些情况下由于 bug 而丢失。 以下是有关查明和解决此类情况的建议:
B2B:
Message Broker:
JPD:
Application Integration:
下面是一个 JMS Server 的样例配置,为 JMS Server 中的对列指定了 Error 队列、消息重发册书和持续性。 |
| <JMSTemplate Name="TemporaryTmplt"/> <JMSJDBCStore ConnectionPool="cgJMSPool-nonXA" Name="cgJMSStore" PrefixName="weblogic"/>
<JMSServer Name="cgJMSServer" Store="cgJMSStore" Targets="cgServer" TemporaryTemplate="TemporaryTmplt">
<JMSQueue CreationTime="1109359134254"
ErrorDestination="ebXMLWeb.queue.AsyncDispatcher_error"
JNDIName="ebXMLWeb.queue.AsyncDispatcher" Name="ebXMLWeb.queue.AsyncDispatcher" RedeliveryDelayOverride="1000" RedeliveryLimit="10" StoreEnabled="true"/> <JMSQueue CreationTime="1109359134314"
JNDIName="ebXMLWeb.queue.AsyncDispatcher_error"
Name="ebXMLWeb.queue.AsyncDispatcher_error" RedeliveryLimit="0"/> </JMSServer>
|
解决方法:
|
| 2003-11-28 19:29:35,889 WARN ExecuteThread: '5' for queue: 'weblogic.kernel.Default' com.bea.wlw.runtime.core.bean.AsyncErrorBean > A message was unable to be delivered from a WLW Message Queue. Attempting to deliver the onAsyncFailure event |
|
解决方法:检查日志文件,找到消息事务回滚的原因。问题可能是由网络问题、数据库问题所致。堆栈跟踪的结尾与下面所示的类似:
|
| at com.bea.wlw.runtime.core.bean.AsyncDispatcherBean.onMessage(AsyncDispatcherBean.java:248) at weblogic.ejb20.internal.MDListener.execute(MDListener.java:370) at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:262) at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2678) at weblogic.jms.client.JMSSession.execute(JMSSession.java:2598) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178) |
无状态 JPD:对于无状态 JPD,在重试了指定的次数后,消息将被丢入 ErrorQueue。要以变通方式解决该问题,请执行以下步骤:
返回页首 调试 WLI
例如,在管理服务器和所有被管服务器上打开 DebugJMSXA:
java weblogic.Admin -url t3://localhost:7001 -username system -password weblogic SET -type ServerDebug -property DebugJMSXA true
例如:
<ServerDebug DebugJMSXA="true" Name="myserver"/>
例如:
-Dweblogic.debug.DebugJMSXA=true 返回页首
已知的 WebLogic Integration 问题 您可定期查看您的 WebLogic Integration 版本的“发行说明”以获得 Service Pack 中的“已知问题”或“已解决的问题”的详细信息,而且还可浏览与消息丢失有关的问题。 方便起见,下面提供了这些发行说明的链接: 对于需要特别注意之处,请参阅以下已知问题,在相应版本 Service Pack 的发行说明中注明了已有针对它们的解决方法或已有可用的解决方法:
返回页首 外部资源
返回页首 需要更多帮助? 如果您已经理解这个模式,但仍需要其它帮助,您可以:
|
|
反馈 请向我们提供您的意见,说明此支持诊断模式“WLI 消息丢失”一文是否有所帮助,您需要的任何解释,以及对支持诊断模式的新主题的任何要求。 |
|
免责声明: 依据 BEA 与您签署的维护和支持协议条款,BEA Systems, Inc. 在本网站上提供技术技巧和修补程序供您使用。虽然您可以将这些信息和代码与您获得 BEA 授权的软件一起使用,但 BEA 并不对所提供的技术技巧和修补程序做任何形式的担保,无论是明确的还是隐含的。 本文档中引用的任何商标是其各自所有者的财产。有关完整的商标信息,请参考您的产品手册。 |