Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMS队列已满_Java_Jboss_Jms - Fatal编程技术网

Java JMS队列已满

Java JMS队列已满,java,jboss,jms,Java,Jboss,Jms,我的JavaEE应用程序不断地向队列发送JMS,但有时JMS使用者应用程序停止接收JMS。它会导致JMS队列非常大甚至满,从而导致服务器崩溃。 我的服务器是JBoss或Websphere。应用服务器是否提供了删除“超时”JMS消息的策略 处理大型JMS队列的策略是什么?谢谢 当然 Message#setjmsexprivation(long)正是您想要的 对于任何异步消息,您必须处理“快速生产者/慢速消费者”问题。有很多方法可以解决这个问题 添加消费者。使用WebSphere MQ,您可以根据

我的JavaEE应用程序不断地向队列发送JMS,但有时JMS使用者应用程序停止接收JMS。它会导致JMS队列非常大甚至满,从而导致服务器崩溃。 我的服务器是JBoss或Websphere。应用服务器是否提供了删除“超时”JMS消息的策略

处理大型JMS队列的策略是什么?谢谢

当然


Message#setjmsexprivation(long)
正是您想要的

对于任何异步消息,您必须处理“快速生产者/慢速消费者”问题。有很多方法可以解决这个问题

  • 添加消费者。使用WebSphere MQ,您可以根据深度触发队列。随着队列深度的增加,一些商店使用它来添加新的消费者实例。然后,随着队列深度开始下降,额外的消费者逐渐消失。通过这种方式,用户可以自动缩放以适应不断变化的负载。其他代理通常具有类似的功能
  • 使队列和底层文件系统非常大。此方法试图完全吸收队列中的工作负载峰值。这毕竟是排队最初设计的目的。问题是,它不能很好地扩展,您必须分配99%的时间几乎为空的磁盘
  • 使旧邮件过期。如果邮件设置了过期时间,则可以使其被清除。某些JMS代理将自动执行此操作,而在其他代理上,您可能需要浏览队列以删除过期的消息。问题在于,并非所有消息都会失去其业务价值,并有资格过期。大多数火灾和遗忘消息(审核日志等)都属于这一类
  • 限制制作人。当队列填满时,任何东西都不能向其放入新消息。在webspheremq中,生成应用程序随后接收一个返回代码,指示队列已满。如果应用程序区分致命错误和暂时错误,它可以停止并重试
  • 成功实现其中任何一项的关键是允许您的系统提供应用程序将响应的“软”错误。例如,许多商店在第一次获得QFULL条件时会提高队列的MAXDEPTH参数。如果队列深度超过基础文件系统的大小,则结果是文件系统将填充,整个节点将受到影响,而不是影响单个队列的“软”错误。您最好对系统进行调优,使队列在文件系统填充之前到达MAXDEPTH well,然后检测应用程序或其他进程,以某种方式对完整队列作出反应


    但不管你做什么,上面的选项4都是强制性的。无论您分配了多少磁盘,部署了多少使用者实例,或者消息过期的速度有多快,您的使用者始终有可能无法跟上消息生成的步伐。当这种情况发生时,你的制作人应用程序应该减速,或者发出警报并停止,或者做除挂起或挂断以外的任何事情。异步消息传递仅在消息队列空间不足时才是异步的。之后,你的应用程序是同步的,必须优雅地处理这种情况,即使这意味着(优雅地)关闭自己的应用程序。

    谢谢你,T.Rob!你的答案是全面而美丽的!很高兴能帮上忙!