0

根据TIBCO EMS 的文件

“对于队列,maxbytes定义了队列可以存储的最大大小(以字节为单位),对队列中的所有消息求和。如果超过此限制,消息将被服务器拒绝,消息生产者发送调用将返回错误。”

目前,我们的一个队列将maxbytes设置为500000000,但待处理的消息大小要高得多,为2.5GB

这怎么可能?

谢谢!

4

2 回答 2

1

一种可能的解释是该maxbytes属性仅与未传递的挂起消息有关。maxbytes这意味着在计算属性时不考虑已传递但尚未被 JMS 使用者确认的消息。

当您show queue <queue_name>使用 EMS 管理工具时,它的Delivered Msgs价值是不是特别高?

于 2013-12-06T09:39:08.677 回答
1

Nicolas Heitz 所说的似乎是正确的。

我在本地运行了一个简单的测试来重现这一点,使用 TIBCO Designer 发送和接收大小约为 4Mb 的大型消息,并且将队列配置为 maxbytes 设置为 100Kb,

这是测试开始前队列的样子: 在此处输入图像描述

第一种情况,队列中没有接收者。

可以向队列发送一条 4MB 的消息,但之后的任何消息都失败了。

在此处输入图像描述

第二种情况,一个接收者不确认消息

起点,队列上有一条 4MB 的待处理消息

发送第二条消息有效 在此处输入图像描述

似乎可以继续发送消息,只要队列中有一个活动的接收者正在处理消息而尚未确认它们。

在此处输入图像描述

结论

如果一个缓慢的消费者没有足够快地确认它接收到的消息,maxbytes将不会限制队列中待处理的 msgs 大小

如果队列中没有消费者,则在发送消息之前会检查maxbytes,如果达到限制,则消息生产者将收到来自 ems 服务器的错误消息,无法发送新消息。

maxbytes属性不会阻止将大于 maxbytes 的消息发送队列。

于 2013-12-06T20:48:35.640 回答