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指南。