이 부분은 rabbitmq website에 있으며 아래쪽에 있습니다. 아래 관련 부분을 인용했습니다.
tl; dr 버전은 애플리케이션 당 1 개의 연결과 스레드 당 1 개의 연결을 가져야한다는 것입니다. 희망이 도움이됩니다.
연결
AMQP 연결은 일반적으로 수명이 긴 있습니다. AMQP는 안정적인 전달을 위해 TCP를 사용하는 응용 프로그램 수준의 프로토콜입니다. AMQP 연결 인증을 사용하며 TLS (SSL)를 사용하여 보호 할 수 있습니다. 응용 프로그램을 더 이상 AMQP 브로커에 연결할 필요가없는 경우 이 갑자기 기본 TCP 연결을 종료하는 대신 이 AMQP 연결을 정상적으로 닫아야합니다.
채널
일부 응용 프로그램은 AMQP 브로커에 여러 개의 연결이 필요합니다. 그러나 동시에 많은 TCP 연결을 열린 상태로 유지하는 것은 바람직하지 않습니다. 이렇게하면 시스템 리소스가 소모되어 더 많은 방화벽을 구성하기가 어려워 지므로 에 동시에 열어 두는 것이 바람직하지 않습니다. AMQP 0-9-1 연결은 "단일 TCP 연결을 공유하는 가벼운 연결"로 생각할 수있는 채널로 다중화 된 입니다.
처리를 위해 다중 스레드/프로세스를 사용하는 응용 프로그램의 경우 스레드/프로세스 당 새 채널을 열고 그 사이에 채널을 공유하지 않는 것이 일반적입니다. 특정 채널에
통신 따라서 모든 AMQP 방법은 클라이언트가 상기 방법은 이에 대해 (그리고 어떤 채널 알아낼 사용 채널 번호, 이벤트 핸들러의 요구를 운반 다른 채널 통신와는 완전히 예를 들어, ).
스레드가 안전하더라도 스레드 당 1 개의 채널이 있으므로 하나의 채널을 통해 여러 스레드가 전송 될 수 있습니다. 귀하의 응용 프로그램 측면에서 스레드 당 1 채널을 고집하는 것이 좋습니다.
또한 채널당 소비자가 한 명인 것이 좋습니다.
다음은 지침 일 뿐이므로 어떤 테스트가 가장 적합한 지 확인해야합니다.
이 스레드는 통찰력을 here 및 here 있습니다. 이러한 모든 지침 this post에도 불구하고
은 대부분 여러 개의 연결함으로써 성능에 영향을주지 않습니다 제안합니다. 그것은 클라이언트 측 또는 서버 (rabbitmq) 측면에 대해 이야기하고 있는지 여부는 명확하지 않지만. 한 가지 점은 더 많은 연결을 통해 더 많은 시스템 리소스를 사용한다는 것입니다. 이것이 문제가 아니며 더 많은 처리량을 원할 경우 this post이 다중 연결을 제안하면 더 많은 처리량을 제공하므로 여러 연결을 갖는 것이 좋습니다. 이유는 여러 채널이 있어도 한 번에 하나의 메시지 만 연결을 통과하는 것입니다. 따라서 큰 메시지는 전체 연결을 차단하거나 하나의 채널에있는 중요하지 않은 메시지가 많으면 동일한 연결이지만 다른 채널의 중요한 메시지를 차단할 수 있습니다. 다시 자원이 문제입니다. 하나의 연결로 모든 대역폭을 다 사용하는 경우 추가 연결을 추가하면 한 연결에서 두 개의 채널을 사용하는 것보다 성능이 향상되지 않습니다. 또한 각 연결은 더 많은 메모리, CPU 및 파일 핸들을 사용하지만, 스케일링 할 때 문제가 될 수는 있지만 걱정하지 않아도됩니다. 허용 대답에 추가
거짓 - "채널 스레드 안전 채널 인스턴스가 여러 thread로 안전하게 사용할 수 있습니다.채널에 대한 요청은 직렬화되며 한 번에 하나의 스레드 만 채널에서 명령을 실행할 수 있습니다. 그럼에도 불구하고, 응용 프로그램은 여러 스레드에서 동일한 채널을 공유하는 대신 스레드 당 채널을 사용하는 편이 낫습니다. "API 문서 – djechlin
ok edit. 당연히 내가 썼다는 것이 이상합니다. 문서가 변경되었을 가능성이 있습니까? 1 개의 소비자, 1 개의 채널, 1 개의 스레드 – robthewolf
채널이 스레드에 안전한지 여부는 구현에 따라 다르며 Java impl은 안전하지만 .net은 안전하지 않습니다. . http://stackoverflow.com/a/17829906/709537 –