maxbyte属性应该如何工作?

时间:2013-12-04 16:20:45

标签: jms tibco tibco-ems

根据documentation tor TIBCO EMS

“对于队列, maxbytes 定义队列可以的最大大小(以字节为单位) store,汇总队列中的所有消息。 如果超出此限制, 消息将被服务器拒绝,消息生产者发送呼叫将 返回错误。“

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

这怎么可能?

谢谢!

2 个答案:

答案 0 :(得分:1)

一种可能的解释是maxbytes属性仅适用于未送达待处理邮件。这意味着在计算maxbytes属性时不会考虑已经交付但尚未由JMS消费者确认的消息。

使用EMS管理工具发布show queue <queue_name>时,Delivered Msgs值是否显得特别高?

答案 1 :(得分:1)

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

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

这是测试开始前队列的样子: enter image description here

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

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

enter image description here

第二种情况,一个接收方未确认消息

起点,队列中有一条4MB未决消息

发送第二条消息有效 enter image description here

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

enter image description here

结论

如果消费者不能确认收到的消息足够快, maxbytes 将不会限制队列中挂起的msgs大小

如果队列中没有消费者,则在发送消息之前将检查 maxbytes ,如果达到限制,消息生产者将从ems服务器收到错误否可以发送新消息。

maxbytes 属性未阻止大于 maxbytes 的邮件被发送到队列。