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

high Spring JMS DefaultMessageListenerContainer是什么。receiveTimeout参数的意思是?

隆钊
2023-03-14

我正在进入一个实现IBM MQ侦听Spring JMS应用程序的项目,我很难理解DefaultMessageListenerContainer中的“receiveTimeout”。

与来自互联网的消息相比,我认为我的项目有点特别,我们使用了一个非常高的值30秒作为“receiveTimeout”参数,我不知道这实际上意味着什么。

我已经试图弄清楚“receiveTimeout”参数的含义,在Spring配置之后,我将在下面给出我的理解。

仅供参考:我们正在读取/处理来自队列的许多消息,这些消息都非常小(约100kb)。

这是我们正在使用的spring配置:

<bean id="msgListenerContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer"
        p:connectionFactory-ref="mqConnectionFactory" 
        p:messageListener-ref="myMessageListener" p:sessionTransacted="true"
        p:concurrentConsumers="1" p:maxConcurrentConsumers="20"
        p:receiveTimeout="30000" p:idleTaskExecutionLimit="10"
        p:idleConsumerLimit="5" />

如果有人在抱怨不同的参数,以下是我在互联网上收集的信息:

idle消费者限制属性用于指定在给定时间允许空闲的最大消费者数量。增加此限制会导致更积极地创建调用者。这有助于更快地增加消费者数量。

idleTaskExecutionLimit:接收任务允许的空闲执行次数的限制。默认值为1,导致任务未收到消息时提前关闭空闲资源。idleTaskExecutionLimit属性设置为10以允许任务执行10次,而不是默认值1。

receiveTimeout属性设置为30秒,以告知DMLC的接收操作轮询消息30秒,而不是默认的1秒。

以下是我的理解:

这意味着:如果有重载,Spring JMS将启动多达20个消费者(maxConcurrentConsumers),一旦负载下降,这些消费者将在关闭或空闲之前继续阅读消息30秒(receiveTimeout)。因此,在此之后,5个消费者(idleConsumerLimit)仍将空闲10秒(?)(idleTaskExecutionLimit)关闭前。

如果我错了,请纠正我。

一个网页上说,我的消费者每30秒只会阅读一条消息,但我认为这不是对“接收超时”的正确解释。

我们目前面临的一个问题是,我们有许多GET从MQ中读取,但实际上没有收到消息-例如,我们可以有60000个GET,它们实际上能够读取消息,相比之下,发生了2100000个GET,但没有读取消息。

我很感谢大家帮助我更好地理解Spring JMS的行为。

共有1个答案

华振
2023-03-14

当询问代理客户端是否还有更多工作时使用接收超时(receive())-它不是轮询代理,只是轮询客户端库以查看代理是否发送了更多消息。这与信息的接收频率无关。

当超时发生时,容器会立即再次调用接收()

高接收超时意味着容器对Stop()调用的响应较少-容器只能在接收()调用之间停止。

 类似资料:
  • 什么是at在这组java代码中是什么意思?我试过搜索,但找不到任何解释。有人知道,请给我解释一下。非常感谢你。 BatchFileController.java

  • 我是javascript的新手。我曾经读过关于SAEF的文章,但我仍然有疑问,代码如下:

  • 问题内容: 我找不到有关VM参数的文档。似乎有必要在Mac上通过LWJGL运行JOGL。这是什么意思?似乎某些进程想要线程0。这正确吗? 请注意:我的主类中有一个方法。它似乎没有覆盖任何内容,并且我没有实现runnable。 我在此处运行的示例源代码:http : //www.lwjgl.org/guide 问题答案: 从Java 1.7.0_u4开始,此选项记录在Mac OSX平台上。 该选项使

  • Attachtoroot:膨胀的层次结构是否应该附加到根参数?如果为false,则root仅用于为XML中的root视图创建正确的LayoutParams子类。 有人能更详细地解释一下吗,特别是根视图是什么,并展示一个和值之间行为变化的示例吗?

  • 问题内容: 该链接指出以下内容: 具有实际类型参数的泛型类型的实例化称为参数化类型。示例(参数化类型): 那么什么是参数化类型? 要么 问题答案: 它们都是参数化类型:以其他类型为参数的类型。 您在表达式的两侧具有不同类型的事实是无关紧要的,并且与多态行为有关,即因为是的子类型。

  • 我找不到VM参数< code >-xstartonfirsthread 的文档。似乎有必要让我在Mac上通过LWJGL运行JOGL。这是什么意思?似乎是某个进程想要线程0。这是正确的吗? 请注意:我的主类中有一个 方法。它似乎没有覆盖任何东西,我没有实现可运行的。 我在这里运行的源代码示例:http://www.lwjgl.org/guide