@Override public boolean ack(String queueName, String messageId) { return queues.get(queueName).ack(messageId); }
@Override public boolean ack(String messageId) { for (DynoQueue q : queues.values()) { if (q.ack(messageId)) { return true; } } return false; }
@Override public boolean ack(String queueName, String messageId) { return queues.get(queueName).ack(messageId); }
public void consume() { try { Set<String> ids = new HashSet<>(); long s = System.currentTimeMillis(); int loopCount = 100; int batchSize = 3500; int count = 0; for (int i = 0; i < loopCount; i++) { List<Message> popped = queue.pop(batchSize, 1, TimeUnit.MILLISECONDS); queue.ack(popped); Set<String> poppedIds = popped.stream().map(Message::getId).collect(Collectors.toSet()); if (popped.size() != poppedIds.size()) { //We consumed dups throw new RuntimeException("Count does not match. expected: " + popped.size() + ", but actual was : " + poppedIds.size() + ", i: " + i); } ids.addAll(poppedIds); count += popped.size(); } long e = System.currentTimeMillis(); long diff = e - s; long throughput = 1000 * ((count) / diff); if (count != ids.size()) { //We consumed dups throw new RuntimeException("There were duplicate messages consumed... expected messages to be consumed " + count + ", but actual was : " + ids.size()); } System.out.println("Consume time: " + diff + ", read throughput: " + throughput + " msg/sec, messages read: " + count); } catch (Exception e) { e.printStackTrace(); } }