RabbitMQ 메시지 크기 및 유형


97
  1. RabbitMQ 대기열에 어떤 메시지를 저장할 수 있습니까? 문자열 만? 아니면 내가 저장하고 싶은 유형을 선택할 수 있습니까 : int, binary, string 등?
  2. 한 메시지의 최대 크기는 얼마입니까?
  3. 얼마나 많은 대기열 또는 교환을 만들 수 있습니까? 아니면 서버의 전원에 의존합니까?

답변:


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

    • 당신이 보내는 것은 바이트 스트링과 변환 될 수 있습니다.
    • 소비자는 그것이 무엇을 얻고 있는지 그리고 그것을 원래 객체로 변환하는 방법을 정확히 알고 있습니다.

    문자열은 매우 쉬우 며, 바이트와의 변환을위한 내장 메소드가 있습니다. 그것이 문자열이라는 것을 알고 있다면 그것을 다시 변환하는 방법을 알고 있습니다. 가장 좋은 방법은 XML, JSON 또는 YML과 같은 마크 업 문자열을 사용하는 것입니다. 이렇게하면 객체를 문자열로 변환 한 다음 다시 원래 객체로 변환 할 수 있습니다. 그들은 프로그래밍 언어에서 작동하므로 소비자가 객체를 이해하는 방법을 알고있는 한 생산자와 다른 언어로 작성할 수 있습니다. 저는 Java에서 일합니다. 필드에 하위 개체가있는 복잡한 메시지를 보내고 싶습니다. 내 메시지 개체를 사용합니다. 메시지 개체에는 두 가지 추가 메서드가 있습니다.toBytes 있으며fromBytes그 바이트 스트림과의 변환. 소비자가 수신하는 메시지 유형에 대해 의심의 여지가없는 라우팅 키를 사용합니다. 메시지는 직렬화 가능합니다. 이것은 잘 작동하지만 다른 Java 프로그램에서만 사용할 수 있으므로 제한적입니다.

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

    성능 측정에 대해 읽어 볼 수도 있습니다. http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ 블로그 / 2012 / 04 / 25 / rabbitmq-performance-measurements-part-2 /

  3. 대기열은 매우 가볍기 때문에 보유한 연결 수에 따라 제한 될 가능성이 큽니다. 대부분의 경우 서버에 따라 다릅니다. 유사한 질문에 대한 정보는 다음과 같습니다. http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html


9

최대 메시지 크기 RabbitMQ에서이었다 지브 2 버전 3.8.0하기 전에 :

%% Trying to send a term across a cluster larger than 2^31 bytes will
%% cause the VM to exit with "Absurdly large distribution output data
%% buffer". So we limit the max message size to 2^31 - 10^6 bytes (1MB
%% to allow plenty of leeway for the #basic_message{} and #content{}
%% wrapping the message body).
-define(MAX_MSG_SIZE, 2147383648).

참조 : https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

그것은이었다 512 MiB 크기 버전 3.8.0 이후 :

%% Max message size is hard limited to 512 MiB.
%% If user configures a greater rabbit.max_message_size,
%% this value is used instead.
-define(MAX_MSG_SIZE, 536870912).

참조 : https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238


4
  1. robthewolf의 답변을 참조하십시오 .

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

  3. RabbitMQ Server Software에서 대기열 수에 대한 엄격한 제한은 없지만 서버가 실행중인 하드웨어가이 제한에 매우 영향을 미칠 수 있습니다.

3a. 기본적으로 서버에서 부과하는 큐 길이 제한은 없습니다. 그러나 서버 측 정책 (구성) 또는 클라이언트 측 정책을 통해이를 제한 할 수 있습니다.최대 대기열 길이

관련 게시물 에 대한 자세한 정보와 링크가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.