将 RabbitMQ 与 Logstash 结合使用时丢失消息

Losing messages when using RabbitMQ with Logstash

我刚刚安装了 RabbitMQ,我正在将它与 logstash 一起使用。 我一直在发送消息,但丢失了很多数据。我不知道该如何解决。我在 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 Management 来查看队列的演变。 当我发送 10,000 条消息时,我只收到不到一半。 我应该更改任何参数以改善 rabbitMQ 的行为吗?我打算按顺序使用它,这样我就不会丢失消息,但我丢失的信息比没有它时还要多。

I can't see any message in the queue

解决此问题的可能步骤

如果由于事务失败或其他原因(例如死信交换)而未首次交付,则添加将消息重新推送到队列的功能。

确保消息是持久的。确认为真,队列是持久的。如果服务器出现故障,应该不会丢失数据。

确保在发布前创建队列。

您应该使用 MessageProperties 使消息持久化。

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

Enable the firehose 跟踪器检查队列中的消息。

Checkout the rabbitmq reliability 指南。