@Override public void push(String queueName, List<com.netflix.conductor.core.events.queue.Message> messages) { List<Message> msgs = messages.stream() .map(msg -> new Message(msg.getId(), msg.getPayload())) .collect(Collectors.toList()); queues.get(queueName).push(msgs); }
@Override public void push(String queueName, String id, long offsetTimeInSecond) { Message msg = new Message(id, null); msg.setTimeout(offsetTimeInSecond, TimeUnit.SECONDS); queues.get(queueName).push(Collections.singletonList(msg)); }
@Override public boolean pushIfNotExists(String queueName, String id, long offsetTimeInSecond) { DynoQueue queue = queues.get(queueName); if (queue.get(id) != null) { return false; } Message msg = new Message(id, null); msg.setTimeout(offsetTimeInSecond, TimeUnit.SECONDS); queue.push(Collections.singletonList(msg)); return true; }
@Override public void push(String queueName, List<com.netflix.conductor.core.events.queue.Message> messages) { List<Message> msgs = messages.stream() .map(msg -> new Message(msg.getId(), msg.getPayload())) .collect(Collectors.toList()); queues.get(queueName).push(msgs); }
@Override public void push(String queueName, String id, long offsetTimeInSecond) { Message msg = new Message(id, null); msg.setTimeout(offsetTimeInSecond, TimeUnit.SECONDS); queues.get(queueName).push(Collections.singletonList(msg)); }
@Override public boolean pushIfNotExists(String queueName, String id, long offsetTimeInSecond) { DynoQueue queue = queues.get(queueName); if (queue.get(id) != null) { return false; } Message msg = new Message(id, null); msg.setTimeout(offsetTimeInSecond, TimeUnit.SECONDS); queue.push(Collections.singletonList(msg)); return true; }
@Override public void run() { List<Message> messages = new LinkedList<>(); for (int i = 0; i < 10; i++) { Message msg = new Message(UUID.randomUUID().toString(), "Hello World-" + i); msg.setPriority(new Random().nextInt(98)); messages.add(msg); } if(published.get() >= count) { publishLatch.countDown(); return; } published.addAndGet(messages.size()); rdq.push(messages); } };
@Override public void run() { List<Message> messages = new LinkedList<>(); for (int i = 0; i < 10; i++) { Message msg = new Message(UUID.randomUUID().toString(), "Hello World-" + i); msg.setPriority(new Random().nextInt(98)); messages.add(msg); } if (published.get() >= count) { publishLatch.countDown(); return; } published.addAndGet(messages.size()); rdq.push(messages); } };
public void publish() { long s = System.currentTimeMillis(); int loopCount = 100; int batchSize = 3000; for (int i = 0; i < loopCount; i++) { List<Message> messages = new ArrayList<>(batchSize); for (int k = 0; k < batchSize; k++) { String id = UUID.randomUUID().toString(); Message message = new Message(id, getPayload()); messages.add(message); } queue.push(messages); } long e = System.currentTimeMillis(); long diff = e - s; long throughput = 1000 * ((loopCount * batchSize) / diff); System.out.println("Publish time: " + diff + ", throughput: " + throughput + " msg/sec"); }
@Test(expected=IllegalArgumentException.class) public void testPrioirty(){ Message msg = new Message(); msg.setPriority(-1); }
@Test(expected=IllegalArgumentException.class) public void testPrioirty2(){ Message msg = new Message(); msg.setPriority(100); } }
@Test public void testAll() { List<Message> messages = new LinkedList<>(); Message msg = new Message("1", "Hello World"); msg.setPriority(1); messages.add(msg); /** * Because of sharding strategy works in round-robin manner, single client, for shard1, should * push message(even the same) to three different shards. */ shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); List<Message> popedFromShard1 = shard1DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard2 = shard2DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard3 = shard3DynoQueue.pop(1, 1, TimeUnit.SECONDS); assertEquals(1, popedFromShard1.size()); assertEquals(1, popedFromShard2.size()); assertEquals(1, popedFromShard3.size()); assertEquals(msg, popedFromShard1.get(0)); assertEquals(msg, popedFromShard2.get(0)); assertEquals(msg, popedFromShard3.get(0)); }
@Test public void testClearQueues() { rdq.clear(); int count = 10; List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("x" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg); } rdq.push(messages); assertEquals(count, rdq.size()); rdq.clear(); assertEquals(0, rdq.size()); }
@Test public void testAll() { List<Message> messages = new LinkedList<>(); Message msg = new Message("1", "Hello World"); msg.setPriority(1); messages.add(msg); /** * Because my custom sharding strategy that depends on message id, and calculated hash (just Java's hashCode), * message will always ends on the same shard, so message never duplicates, in test case, I expect that * message will be received only once. */ shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); List<Message> popedFromShard1 = shard1DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard2 = shard2DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard3 = shard3DynoQueue.pop(1, 1, TimeUnit.SECONDS); assertEquals(0, popedFromShard1.size()); assertEquals(1, popedFromShard2.size()); assertEquals(0, popedFromShard3.size()); assertEquals(msg, popedFromShard2.get(0)); } }
Message msg = new Message(); msg.setId("" + i); msg.setPayload("" + i);
@Test public void testClearQueues() { rdq.clear(); int count = 10; List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("x" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg); } rdq.push(messages); assertEquals(count, rdq.size()); rdq.clear(); assertEquals(0, rdq.size()); }
@Test public void testClearQueues() { rdq.clear(); int count = 10; List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("x" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg); } rdq.push(messages); assertEquals(count, rdq.size()); rdq.clear(); assertEquals(0, rdq.size()); }
List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg);
@Test public void test(){ Message msg = new Message(); msg.setPayload("payload"); msg.setTimeout(10, TimeUnit.SECONDS); assertEquals(msg.toString(), 10*1000, msg.getTimeout()); msg.setTimeout(10); assertEquals(msg.toString(), 10, msg.getTimeout()); }
List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg);