【发布时间】:2014-06-30 15:00:34
【问题描述】:
我正在使用rabbitmq,我想确保如果我在客户端出现连接问题,我发布的消息不会丢失。我用 eclipse 模拟它:我在 100 条消息后执行 system.exit 获取程序。我发布了 1000 条消息。第二次运行我不限制消息的数量,它返回了 3 次 840 条消息。你能帮助我吗?
生产者的代码是:
public void run() {
String json =SimpleQueueServiceSample.getFromList();
while (!(json.equals(""))){
json =SimpleQueueServiceSample.getFromList();
try {
c.basicPublish("", "test",
MessageProperties.PERSISTENT_TEXT_PLAIN, json.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
c.waitForConfirmsOrDie();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
消费者的代码是:
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
System.out.println(count++);
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" [x] Received '" + message + "'");
}
【问题讨论】:
-
您使用自动确认,它会在消费者请求消息后立即从队列中删除消息,无论它是否被正确处理,是否已传递给客户端。尝试使用手动消息确认。
标签: queue cloud rabbitmq bigdata