簡體   English   中英

為RabbitMQ配置Spring Integration QueueChannel

[英]Configuring Spring Integration QueueChannel for RabbitMQ

我目前正在使用Spring AMQP API連接到RabbitMQ。 基本上,在用戶代碼中,我異步讀取消息,並在彈性搜索中進行批量插入。 當我做ack = AUTO時,我得到400-500 msg / sec的中等速度(從隊列中讀取)。 當我做ack = NONE時,讀取速度的增加非常大,即達到5000-6000 msg / sec。

配置如下:

  • 具有32GB RAM的Linux機器
  • JVM參數:

-server -Xms1g -Xmx1g -Xss384k PermSize=256m MaxPermSize=256m

現在的問題是,盡管我獲得了不錯的速度,但是當我執行ack = NONE時,JVM在一段時間后獲得了OutOfMemory,我可以看到在這種情況下發生了很多GC。

我打算使用Spring集成中的QueueChannel,可以在其中限制通道的大小,因為它可以包含多少消息。

我如何用RabbitMQ來實現這一點,還有沒有其他方法可以達到良好的讀取速度,例如4000-5000 msg / sec而又不會使JVM崩潰?

嘗試使用ack=AUTO ,但是將prefetchtxSize設置為1000。 這樣,將僅每1000條消息發送一個確認(您可以根據需要調整此值)。

使用ackmode = NONE會導致消息在偵聽器容器內的無限制阻塞隊列中累積,並且僅在偵聽器能夠跟上時才起作用(OOM表示您不能)。

我們有一個開放的JIRA問題可以解決ack = NONE的問題,但是上述技術通常就足夠了。

您還可以使用容器並發設置提高吞吐量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM