2013-08-21 2 views
73
  1. RabbitMQ 대기열에는 어떤 메시지를 저장할 수 있습니까? 문자열 만? 또는 저장할 유형을 int, binary, string 등으로 선택할 수 있습니까?
  2. 하나의 메시지의 최대 크기는 얼마입니까?
  3. 만들 수있는 큐 수는 몇 개입니까? 아니면 서버의 성능에 달려 있습니까?

답변

88
  1. 이론적으로 아무것도는 메시지로 전송/저장할 수 있습니다. 실제로 대기열에 아무 것도 저장하고 싶지 않습니다. 대부분의 경우 대기열이 비어 있으면 시스템이 가장 효율적으로 작동합니다. 두 가지 전제 조건으로 큐에 당신이 원하는 무엇이든을 보낼 수 있습니다

    • 당신이하고
    • 소비자가 정확히 알고있는 bytestring에서 변환 할 수 있습니다 보내는 것은이 점점 무슨과로 변환하는 방법 원래 개체

    문자열 꽤 쉽게, 그들은가 바이트에서 변환하는 방법에 구축했다. 문자열이라면 다시 변환하는 방법을 알고 있습니다. 가장 좋은 방법은 XML, JSON 또는 YML과 같은 마크 업 문자열을 사용하는 것입니다. 이렇게하면 객체를 문자열로 변환하고 다시 원래 객체로 변환 할 수 있습니다. 그들은 프로그래밍 언어 전반에서 작동하므로 소비자는 객체를 이해하는 방법을 알고있는 한 생산자와 다른 언어로 작성 될 수 있습니다. Java로 작업합니다. 필드에 하위 오브젝트가있는 복잡한 메시지를 보내려고합니다. 나는 내 자신의 메시지 객체를 사용한다. 메시지 개체에는 바이트 스트림으로 변환하거나 바이트 스트림에서 변환하는 두 가지 추가 메서드 toBytesfromBytes이 있습니다. 나는 고객이 어떤 유형의 메시지를 수신하는지에 관해 의문의 여지가없는 라우팅 키를 사용합니다. 메시지는 Serializable입니다. 이것은 정상적으로 작동하지만 다른 Java 프로그램에서만 사용할 수 있으므로 제한적입니다.

  2. 메시지의 크기는 서버의 메모리로 제한되며 영구적 인 경우에도 사용 가능한 HDD 공간이 너무 큽니다. 너무 큰 메시지는 보내지 않으실 것입니다. 파일이나 DB에 대한 참조를 보내는 것이 더 나을 수도 있습니다.

    또한 자신의 성과 측정에 읽을 할 수 있습니다 : http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/

  3. 큐 꽤 가벼운 무게, 당신이 가장 가능성이 당신이 가지고있는 연결의 수에 의해 제한됩니다. 가장 가능성있는 서버에 따라 다릅니다. http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html

2
  1. robthewolf's answer를 참조하십시오 여기에 비슷한 질문에 대한 몇 가지 정보입니다.

  2. 최대 메시지 크기는 2GB이지만이 크기의 메시지에 대한 성능 조정은 효과적이지 않습니다. Max Message Size

  3. 큐의 수에 RabbitMQ 서버 소프트웨어에 의해 부과 된 더 하드 제한이 없습니다, 그러나, 서버가 실행되는 하드웨어는 잘이 제한에 영향을 미칠 수 있습니다.

3a.기본적으로 서버에 의해 지정된 큐 길이 제한은 없습니다. 그러나 서버 측 정책 (구성) 또는 클라이언트 측 정책을 통해이를 제한 할 수 있습니다. Max Queue Length

related post에 대한 자세한 정보 및 링크가 있습니다.