0

我剛剛安裝了RabbitMQ,我正在使用它與logstash。 我一直在發送消息,但我失去了大量的數據。我不知道我怎麼能解決它。我在rabbitMQ中使用默認配置。RabbitMQ正在丟失消息

這些都是logstash輸出和logstash輸入:

output { 
rabbitmq { 
    host => "IPHOST" 
    exchange => "logstash-rabbitmq" 
    exchange_type => "direct" 
    key => "logstash-key" 
    workers =>4 
    durable => true 
    persistent => true 
} 
} 




input 
{ 

rabbitmq { 
    host => "IPHOST" 
    queue => "logstash-queue" 
    durable => true 
    key => "logstash-key" 
    threads => 8 
    prefetch_count => 100 
    port => 5672 
    user => "test" 
    password => "test" 
    ack => false 
    exchange => "logstash-rabbitmq" 
} 

} 

我使用RabbitMQ的管理才能看到我的隊列的演變。 當我發送10,000條消息時,我只收到不到一半的消息。 是否有任何參數需要改變以改善rabbitMQ的行爲?我會按順序使用它,這樣我就不會丟失信息,但是我比沒有它時損失更多。

I can't see any message in the queue

+0

將'ack'參數更改爲'true'。這意味着消費者必須發回一個接收消息的確認,然後再轉到隊列中的另一條消息。 – idbehold

+0

我已經嘗試過,但我有同樣的問題。我收到更多的消息,而不使用rabbitMQ。這是廢話 – billy6

+0

如果由於事務失敗或任何其他原因(如交換失敗信息)而未能首次交付消息,請添加此功能以重新將消息推送到隊列中。確保消息是持久的。確認是真實的,隊列是耐用的。如果服務器出現故障,應該沒有數據丟失。 – underdog

回答

1

可能的措施來解決這個問題

添加的功能,如果不交付首次因交易失敗或什麼的,就像一紙空文交換消息重新推到隊列中。

確保消息持久。確認是真實的,隊列是耐用的。如果服務器出現故障,應該沒有數據丟失。

確保在發佈之前創建隊列。

您應該使用MessageProperties來使消息持久化。

channel.basicPublish("", "task_queue", 
     MessageProperties.PERSISTENT_TEXT_PLAIN, 
     message.getBytes()); 

Enablefirehose示蹤劑在隊列中檢查消息。

Checkout the rabbitmq reliability指南。