[英]Configuring Spring Integration QueueChannel for RabbitMQ
我目前正在使用Spring AMQP API連接到RabbitMQ。 基本上,在用戶代碼中,我異步讀取消息,並在彈性搜索中進行批量插入。 當我做ack = AUTO時,我得到400-500 msg / sec的中等速度(從隊列中讀取)。 當我做ack = NONE時,讀取速度的增加非常大,即達到5000-6000 msg / sec。
配置如下:
-server -Xms1g -Xmx1g -Xss384k PermSize=256m MaxPermSize=256m
現在的問題是,盡管我獲得了不錯的速度,但是當我執行ack = NONE時,JVM在一段時間后獲得了OutOfMemory,我可以看到在這種情況下發生了很多GC。
我打算使用Spring集成中的QueueChannel,可以在其中限制通道的大小,因為它可以包含多少消息。
我如何用RabbitMQ來實現這一點,還有沒有其他方法可以達到良好的讀取速度,例如4000-5000 msg / sec而又不會使JVM崩潰?
嘗試使用ack=AUTO
,但是將prefetch
和txSize
設置為1000。 這樣,將僅每1000條消息發送一個確認(您可以根據需要調整此值)。
使用ackmode = NONE會導致消息在偵聽器容器內的無限制阻塞隊列中累積,並且僅在偵聽器能夠跟上時才起作用(OOM表示您不能)。
我們有一個開放的JIRA問題可以解決ack = NONE的問題,但是上述技術通常就足夠了。
您還可以使用容器並發設置提高吞吐量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.