개발자
RabbitMQ를 도입하였습니다. 도입의 이유는 스프링 내장 메시지 브로커를 이용하게 되면 인메모리 기반의 동작 방식으로 인해 서버 문제 발생 시 메시지가 유실되거나 확장에도 제한이 있다고 판단하여 도입하였습니다. 현직자 분들이 보기에 이 이유가 적합한 근거가 될까요? 추가로 JMeter로 RabbitMQ를 사용했을 때와 사용하지 않았을 때의 성능을 비교했는데 사용자 100명 기준 성능도 사용하지 않았을 때가 우세했고, RabbitMQ를 사용했을 때는 오히려 아래와 같은 오류가 가끔 발생하며 메시지또한 약 90퍼센트 정도만 저장된걸 확인할 수 있었습니다. 무엇이 문제이며 해결 방안이 있을까요?? java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) ~[na:na] at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) ~[na:na] at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) ~[netty-buffer-4.1.114.Final.jar:4.1.114.Final] at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[netty-buffer-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.114.Final.jar:4.1.114.Final] at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]
답변 0
첫 답변을 기다리고 있어요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2월 14일
귀하가 RabbitMQ를 도입한 이유는 충분히 합리적입니다. 물론 일반적으로 메시징 시스템은 신뢰성, 내구성, 메시지 전달 보증 등에 매우 유용합니다. 성능 문제와 관련해서는, RabbitMQ의 성능은 일반적으로 메시지 큐에 데이터를 저장하는 복잡성과 네트워크 오버헤드 때문에 내장 메모리 기반의 솔루션보다 다소 느릴 수 있습니다. 하지만, 이것이 성능 저하의 유일한 원인은 아닙니다. 사용자 100명에서 성능 차이를 보았다면, RabbitMQ 설정을 점검해볼 필요가 있습니다. 특히 메시지 팍싱 설정과 같은 것들이 올바르게 되어 있는지 확인해야 합니다. 이러한 설정들은 RabbitMQ 인스턴스의 성능에 큰 영향을 줄 수 있습니다. 'java.net.SocketException: Connection reset' 오류는 클라이언트와 서버 간의 TCP 연결이 비정상적으로 종료되었음을 나타냅니다. 이 문제는 서버나 네트워크가 과부하 상태일 때 주로 발생합니다. 이 문제를 해결하기 위해서는 다음과 같은 접근 방법들이 있습니다. 1. RabbitMQ 서버나 네트워크 인프라의 로드를 감소시키는 것 2. RabbitMQ 서버의 시스템 리소스 할당을 늘리는 것 3. 클라이언트와 서버 사이의 네트워크 연결 품질을 향상시키는 것 마지막으로, 메시지가 유실된다면, 이는 RabbitMQ에 메시지를 영구적으로 저장하도록 설정되어 있지 않을 가능성이 있습니다. 이 경우에는 "durable" 속성을 true로 설정해보고 결과를 확인하는 것이 좋습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!