2013-08-21 73 views
73
  1. RabbitMQ隊列中可存儲哪些消息?只有字符串?或者我可以選擇我想要存儲的類型:int,binary,string等?
  2. 一封郵件的最大尺寸是多少?
  3. 可以創建多少隊列或交換?還是取決於服務器的能力?

回答

88
  1. 理論上任何東西都可以被存儲/作爲消息發送。你實際上不想在隊列中存儲任何東西。如果隊列大部分時間都是空的,系統工作效率最高。您可以發送任何你想要的隊列中有兩個前提條件:

    • 您發送可以轉換和從字節串
    • 消費者確切地知道事情什麼是獲取和如何將它轉換爲原始對象

    字符串是很容易的,他們有一個內置的方法轉換和從字節。如果你知道這是一個字符串,那麼你知道如何將其轉換回來。最好的選擇是使用XML,JSON或YML等標記字符串。這樣你就可以將對象轉換爲字符串,然後再轉換回原始對象;他們在編程語言中工作,所以只要知道如何理解對象,就可以用不同的語言向生產者寫入消費者。我在Java工作。我想發送複雜的消息與字段中的子對象。我使用我自己的消息對象。消息對象有兩個額外的方法toBytesfromBytes,它們可以轉換爲字節流或從字節流轉換。我使用路由密鑰,毫不懷疑消費者正在接收什麼類型的消息。該消息是可序列化的。這工作正常,但限制,因爲我只能用於其他Java程序。

  2. 消息的大小受服務器內存的限制,如果它是永久的,那麼也是空閒的硬盤空間。你可能不想發送太大的消息;發送對文件或數據庫的引用可能會更好。

    您還可能要對他們的表現措施讀了起來: 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更多的信息和鏈接。