“对于队列, maxbytes 定义队列可以的最大大小(以字节为单位) store,汇总队列中的所有消息。 如果超出此限制, 消息将被服务器拒绝,消息生产者发送呼叫将 返回错误。“
目前,我们的其中一个队列 maxbytes 设置为 500000000 ,但待处理的msgs大小要高得多, 2.5GB
这怎么可能?
谢谢!
答案 0 :(得分:1)
一种可能的解释是maxbytes
属性仅适用于未送达待处理邮件。这意味着在计算maxbytes
属性时不会考虑已经交付但尚未由JMS消费者确认的消息。
使用EMS管理工具发布show queue <queue_name>
时,Delivered Msgs
值是否显得特别高?
答案 1 :(得分:1)
Nicolas Heitz所说的似乎是正确的。
我在本地运行了一个简单的测试来重现这一点,使用TIBCO Designer发送和接收大小约为4Mb的大型消息和一个配置为maxbytes设置为100Kb的队列,
这是测试开始前队列的样子:
可以向队列发送一条4MB消息,但此后的任何消息都会失败。
起点,队列中有一条4MB未决消息
发送第二条消息有效
似乎可以继续发送消息,只要队列中有活动的接收者处理消息而尚未确认消息。
如果消费者不能确认收到的消息足够快, maxbytes 将不会限制队列中挂起的msgs大小。
如果队列中没有消费者,则在发送消息之前将检查 maxbytes ,如果达到限制,消息生产者将从ems服务器收到错误否可以发送新消息。
maxbytes 属性未阻止大于 maxbytes 的邮件被发送到队列。