안녕하세요 저는 RabbitMQ에 연결하기 위해 현재 봄 AMQP API를 사용하고 있습니다. 기본적으로 소비자 코드에서 비동기 적으로 메시지를 읽고 탄성 검색에 대량 삽입을하고 있습니다. 나는 ack = AUTO 일 때 400-500 msg/sec의 적당한 속도를 얻는다. 나는 ack = NONE을 할 때 읽기 속도가 빨라진다. 즉 5000-6000 msg/sec로 증가한다. 내가 ACK를하고있는 중이 야 때 32기가바이트 RAM JVM 인수와 함께 리눅스 머신을 다음과 같이RabbitMQ 용 Spring Integration QueueChannel 구성
하드웨어 구성이 -server -Xms1g -Xmx1g -Xss384k PermSize = 256m를 MaxPermSize = 256m
지금 문제가 = NONE 비록 JVM이 OutOfMemory를 얼마 동안 얻었는지 알 수는 있지만이 시나리오에서는 많은 GC가 발생하는 것을 볼 수 있습니다.
얼마나 많은 메시지를 포함 할 수 있는지에 따라 채널 크기를 제한 할 수있는 Spring 통합의 QueueChannel을 사용할 계획입니다.
사람은 어떻게 RabbitMQ와이를 구현하는 모든 도움이 높게 평가 된 JVM
충돌없이 4000-5000 MSG/초와 같은 좋은 읽기 속도를 달성하기 위해 다른 방법이 말해 수 있습니다.
감사 Shantanoo K
이미 프리 페치 카운트가 750이지만, txSize를 사용하지 않습니다. (어떤 효과가 있습니까?) 또한 크기 제한이 있기 때문에 RabbitMQ와 Spring 통합의 QueueChannel을 사용할 수 있습니다. –
'txSize' 참조 설명서에서 : "acknowledgeMode AUTO와 함께 사용하면 컨테이너는 ack를 보내기 전에이 수만큼의 메시지를 처리하려고 시도합니다 (대기 중 각각의 수신 타임 아웃 설정까지). 이것은 트랜잭션 채널이 커밋 된 경우에도 마찬가지입니다 .prefetchCount가 txSize보다 작 으면 txSize와 일치하도록 증가합니다. "SI QueueChannel을 사용하면 이 시나리오에서는 메모리 사용량이 리스너 컨테이너 안에 있습니다. –