JMS 队列已满
我的 Java EE 应用程序连续发送 JMS 排队,但有时 JMS 使用者应用程序停止接收 JMS。它会导致 JMS 队列非常大,甚至已满,从而导致服务器崩溃。我的服务器是JBoss或Websphere。应用程序服务器是否提供删除“超时”JMS 消息的策略?
处理大型 JMS 队列的策略是什么?谢谢!
我的 Java EE 应用程序连续发送 JMS 排队,但有时 JMS 使用者应用程序停止接收 JMS。它会导致 JMS 队列非常大,甚至已满,从而导致服务器崩溃。我的服务器是JBoss或Websphere。应用程序服务器是否提供删除“超时”JMS 消息的策略?
处理大型 JMS 队列的策略是什么?谢谢!
对于任何异步消息传递,您都必须处理“快速生产者/慢速消费者”问题。有许多方法可以解决这个问题。
成功实现其中任何一个的关键是允许系统提供应用程序将响应的“软”错误。例如,许多商店会在首次获得 QFULL 条件时提高队列的 MAXDEPTH 参数。如果队列深度超过底层文件系统的大小,则结果是文件系统将填充并影响整个节点,而不是影响单个队列的“软”错误。您最好调整系统,以便队列在文件系统填满之前达到MAXDEPTH,然后再检测应用程序或其他进程,以以某种方式对完整队列做出反应。
但无论你做什么,上面的选项#4都是强制性的。无论您分配了多少磁盘,部署了多少使用者实例,或者消息过期的速度有多快,您的使用者总是有可能跟不上消息生产。发生这种情况时,你的生产者应用应该限制,或者发出警报,然后停止或执行挂起或死亡以外的任何操作。异步消息传递仅在您用完空间来排队消息之前是异步的。之后,你的应用是同步的,必须优雅地处理这种情况,即使这意味着(优雅地)关闭自己的应用。
确定!
http://download.oracle.com/docs/cd/E17802_01/products/products/jms/javadoc-102a/index.html 完全按照您的要求。Message#setJMSExpiration(long)