将 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 的行为吗?我打算按顺序使用它,这样我就不会丢失消息,但我丢失的信息比没有它时还要多。
解决此问题的可能步骤
如果由于事务失败或其他原因(例如死信交换)而未首次交付,则添加将消息重新推送到队列的功能。
确保消息是持久的。确认为真,队列是持久的。如果服务器出现故障,应该不会丢失数据。
确保在发布前创建队列。
您应该使用 MessageProperties 使消息持久化。
channel.basicPublish("", "task_queue",
MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes());
Enable the firehose 跟踪器检查队列中的消息。
Checkout the rabbitmq reliability 指南。
我刚刚安装了 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 的行为吗?我打算按顺序使用它,这样我就不会丢失消息,但我丢失的信息比没有它时还要多。
解决此问题的可能步骤
如果由于事务失败或其他原因(例如死信交换)而未首次交付,则添加将消息重新推送到队列的功能。
确保消息是持久的。确认为真,队列是持久的。如果服务器出现故障,应该不会丢失数据。
确保在发布前创建队列。
您应该使用 MessageProperties 使消息持久化。
channel.basicPublish("", "task_queue",
MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes());
Enable the firehose 跟踪器检查队列中的消息。
Checkout the rabbitmq reliability 指南。