当前位置: 首页 > 知识库问答 >
问题:

如何处理JMS队列满了的情况?

郎雪风
2023-03-14

我已经创建了一个队列。生产者持续发布到JMS队列。但是,使用者需要一些时间来处理消息,一段时间后队列就会满。

如何在生产者端(即Java应用程序)和JMS代理上处理这种情况?

共有1个答案

游乐池
2023-03-14

这是消息传递中的一个典型问题。

消息产量可能会在一段时间内超过消息消费量,但消费量最终必须赶上,而且在大多数情况下越快越好。在此期间,代理将充当存储消息的缓冲区,但是传统的消息代理(如ActiveMQ)不是为了存储大量数据而设计的(例如,像数据库一样)。它们是为大量数据流过而设计的,而内存和磁盘中存储的数据相对较少。

底线是,如果队列变得“满”,那么您要么必须放慢(或可能停止)消息生成,直到消费者能够赶上并清除队列中的空间,要么需要加快消费者的速度(例如,通过增加消费者的数量)。生产和消费是一个方程式的两面,需要或多或少地保持平衡。

 类似资料:
  • 我可以在solace JMS队列中搜索任何特定的消息,然后在其他消息之前处理吗?我们有这样的功能w. r. t慰藉队列。

  • 默认情况下,C++容器应该是线程安全的。我必须错误地使用多线程,因为对于此代码: 我得到了:

  • 我认为最初的作者认为这将创建一个持久的队列,但显然不是。我找不到这方面的好文档,想知道是否有人能证实/否认这一点。 提前谢了。

  • 问题内容: Sidekiq可以阻止哪些可能的原因来处理队列中的作业?队列已满。日志文件表明完全没有活动。因此,队列已满,但日志为空,Sidekiq似乎未处理项目。似乎没有工人在处理工作。重新启动Redis或用FLUSHALL或FLUSHDB冲洗均无效。Sidekiq已开始于 捆绑执行程序sidekiq -L log / sidekiq.log 并生成以下日志文​​件: 您如何找出问题所在?是否有隐

  • 问题内容: 我正在尝试在Python中的多处理库中使用队列。执行下面的代码后(打印语句起作用),但是在调用Queue上的join之后,这些进程没有退出,并且仍然存在。我如何终止其余过程? 谢谢! 问题答案: 尝试这个:

  • 目前我有一个Weblogic 10R3开发的Java EE应用程序主机,我有兴趣测试1个消息驱动Bean。问题是我无法访问Bean正在侦听的外部JMS服务器,以下是MDB代码: 我的计划是,Bean将通过JNDI查找队列,并且我确实可以访问Weblogic托管服务器。因此,我可以删除外部JMS服务器,然后添加一个本地JMS队列和包含确切JNDI名称的connectionFactory。因此,隔离外