Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 将RabbitMQ与Logstash一起使用时丢失消息_Logging_Rabbitmq_Logstash_Logstash Configuration_Rabbitmq Exchange - Fatal编程技术网

Logging 将RabbitMQ与Logstash一起使用时丢失消息

Logging 将RabbitMQ与Logstash一起使用时丢失消息,logging,rabbitmq,logstash,logstash-configuration,rabbitmq-exchange,Logging,Rabbitmq,Logstash,Logstash Configuration,Rabbitmq Exchange,我刚刚安装了RabbitMQ,我正在与logstash一起使用它。 我一直在发送消息,但丢失了很多数据。我不知道该怎么解决它。我在rabbitMQ中使用默认配置 这些是logstash中的输出和logstash中的输入: output { rabbitmq { host => "IPHOST" exchange => "logstash-rabbitmq" exchange_type => "direct" key => "log

我刚刚安装了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管理来查看队列的演变。 当我发送10000条信息时,我只收到不到一半的信息。 是否有任何参数需要更改以改进rabbitMQ的行为?我本来打算按顺序使用它,这样我就不会丢失信息,但我丢失的信息甚至比没有它时还要多


解决此问题的可能步骤


如果由于事务失败或其他原因(如死信交换)第一次未传递消息,请添加此功能以将消息重新推送到队列

确保消息是持久的。确认为true,队列是持久的。如果服务器宕机,应该不会有数据丢失

确保在发布之前已创建队列

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

channel.basicPublish("", "task_queue", 
        MessageProperties.PERSISTENT_TEXT_PLAIN,
        message.getBytes());
用于检查队列中消息的跟踪程序


rabbitmq指南。

ack
参数更改为
true
。这意味着消费者必须在从队列转到另一条消息之前发送回接收消息的确认。我已经尝试过了,但我也遇到了同样的问题。我在不使用rabbitMQ的情况下收到更多的消息。如果由于事务失败或其他原因(如死信交换)第一次未传递消息,则添加将消息重新推送到队列的功能是不明智的。确保消息是持久的。确认为true,队列是持久的。如果服务器宕机,应该不会有数据丢失。