我的生產者阻塞

 常見問題 > 錯誤 > 我的生產者阻塞

如果我的生產者阻塞而無法發送訊息,我該怎麼辦?

這與生產者流量控制有關。

Active 4.x

在 ActiveMQ Classic 4.x 中,所有傳輸中的訊息都保存在記憶體中。如果您有速度較慢的消費者,為了避免耗盡 JVM 記憶體並出現記憶體不足錯誤,ActiveMQ Classic 有一個可配置的限制,限制它可以保存多少傳輸中的訊息。一旦達到限制,生產者將會被減速/阻塞。

一個快速的解決方案是在您的 Xml 設定中增加 usageManager 的設定。ActiveMQ Classic 預設的設定非常低,只有 20MB 的 RAM,所以嘗試將其設定為較大的值,例如 512MB。

另一種方法是在不同的目的地以及針對生產者和消費者設定個別的 usageManager 限制。

您可能還想使用 JMX 支援或 Web 控制台來查看正在使用的目的地以及您擁有的生產者和消費者,以了解發生了什麼事。

Active 5.x 及更新版本

從 ActiveMQ Classic 5.x 開始,支援 訊息游標,預設情況下會將訊息從記憶體移到磁碟上。因此,除非您填滿訊息儲存的最大分配磁碟空間(通常大一個數量級),否則不會看到此問題。

另請參閱

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 The Apache Software Foundation 的商標。 版權所有 © 2024,The Apache Software Foundation。根據Apache License 2.0授權。