Kích thước và loại tin nhắn RabbitMQ


97
  1. Những thông báo nào có thể được lưu trữ trong hàng đợi RabbitMQ? Chỉ chuỗi? Hoặc tôi có thể chọn loại mà tôi muốn lưu trữ: int, binary, string, v.v.?
  2. Kích thước tối đa của một tin nhắn là bao nhiêu?
  3. Có bao nhiêu hàng đợi hoặc trao đổi có thể được tạo? Hay nó phụ thuộc vào sức mạnh của máy chủ?

Câu trả lời:


117
  1. Về mặt lý thuyết, mọi thứ đều có thể được lưu trữ / gửi dưới dạng tin nhắn. Bạn thực sự không muốn lưu trữ bất cứ thứ gì trên hàng đợi. Hệ thống hoạt động hiệu quả nhất nếu hàng đợi trống hầu hết thời gian. Bạn có thể gửi bất cứ thứ gì bạn muốn vào hàng đợi với hai điều kiện tiên quyết:

    • Nội dung bạn đang gửi có thể được chuyển đổi thành và từ một bytestring
    • Người tiêu dùng biết chính xác những gì họ nhận được và làm thế nào để chuyển đổi nó sang đối tượng ban đầu

    Các chuỗi khá dễ dàng, chúng có một phương pháp tích hợp để chuyển đổi sang và chuyển từ byte. Nếu bạn biết nó là một chuỗi thì bạn biết cách chuyển đổi nó trở lại. Tùy chọn tốt nhất là sử dụng chuỗi đánh dấu như XML, JSON hoặc YML. Bằng cách này, bạn có thể chuyển đổi các đối tượng thành Chuỗi và quay lại các đối tượng ban đầu; chúng hoạt động trên các ngôn ngữ lập trình để người tiêu dùng của bạn có thể viết bằng ngôn ngữ khác cho nhà sản xuất của bạn miễn là nhà sản xuất biết cách hiểu đối tượng. Tôi làm việc trong Java. Tôi muốn gửi các tin nhắn phức tạp với các đối tượng phụ trong các trường. Tôi sử dụng đối tượng tin nhắn của riêng tôi. Đối tượng thông báo có hai phương thức bổ sung toBytesfromByteschuyển đổi đến và từ bytestream. Tôi sử dụng các khóa định tuyến không để lại nghi ngờ gì về loại thông điệp mà người tiêu dùng đang nhận được. Tin nhắn có thể được nối tiếp. Điều này hoạt động tốt, nhưng bị hạn chế vì tôi chỉ có thể sử dụng nó với các chương trình Java khác.

  2. Kích thước của tin nhắn bị giới hạn bởi bộ nhớ trên máy chủ và nếu nó liên tục thì dung lượng ổ cứng còn trống cũng vậy. Bạn có thể không muốn gửi những tin nhắn quá lớn; có thể tốt hơn nếu gửi một tham chiếu đến một tệp hoặc DB.

    Bạn cũng có thể muốn đọc các thước đo hiệu suất của họ: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/ blog / 2012/04/25 / Rabbitmq-performance-Measure-part-2 /

  3. Hàng đợi có trọng lượng khá nhẹ, rất có thể bạn sẽ bị giới hạn bởi số lượng kết nối bạn có. Nó sẽ phụ thuộc vào máy chủ rất có thể. Dưới đây là một số thông tin về một câu hỏi tương tự: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-Feb 2/003042.html


9

Các kích thước tin nhắn tối đa trong RabbitMQ là 2 GiB trước khi phiên bản 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).

Tham khảo: https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

Nó đã là 512 MiB kể từ phiên bản 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).

Tham khảo: https://github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238


4
  1. Hãy xem câu trả lời của robthewolf .

  2. Kích thước thư tối đa là 2GB, tuy nhiên, việc điều chỉnh hiệu suất cho các thư có kích thước này không hiệu quả. Kích thước tin nhắn tối đa

  3. Không có giới hạn cứng do Phần mềm Máy chủ RabbitMQ áp đặt về số lượng hàng đợi, tuy nhiên, phần cứng mà máy chủ đang chạy có thể ảnh hưởng rất nhiều đến giới hạn này.

3a. Không có giới hạn độ dài hàng đợi do máy chủ áp đặt theo mặc định. Tuy nhiên, bạn có thể hạn chế điều này thông qua chính sách phía máy chủ (cấu hình) hoặc chính sách phía máy khách. Độ dài hàng đợi tối đa

Có thêm thông tin và liên kết trên một bài đăng liên quan .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.