@Override public List<String> push(final List<Message> messages) { Stopwatch sw = monitor.start(monitor.push, messages.size()); try { execute("push", "(a shard in) " + queueName, () -> { for (Message message : messages) { String json = om.writeValueAsString(message); quorumConn.hset(messageStoreKey, message.getId(), json); double priority = message.getPriority() / 100.0; double score = Long.valueOf(clock.millis() + message.getTimeout()).doubleValue() + priority; String shard = shardingStrategy.getNextShard(allShards, message); String queueShard = getQueueShardKey(queueName, shard); quorumConn.zadd(queueShard, score, message.getId()); } return messages; }); return messages.stream().map(msg -> msg.getId()).collect(Collectors.toList()); } finally { sw.stop(); } }
@Override public List<String> push(final List<Message> messages) { Stopwatch sw = monitor.start(monitor.push, messages.size()); RedisConnection conn = connPool.getResource(); try { Pipe pipe = conn.pipelined(); for (Message message : messages) { String json = om.writeValueAsString(message); pipe.hset(messageStoreKey(message.getId()), message.getId(), json); double priority = message.getPriority() / 100.0; double score = Long.valueOf(clock.millis() + message.getTimeout()).doubleValue() + priority; pipe.zadd(myQueueShard, score, message.getId()); } pipe.sync(); pipe.close(); return messages.stream().map(msg -> msg.getId()).collect(Collectors.toList()); } catch (Exception e) { throw new RuntimeException(e); } finally { conn.close(); sw.stop(); } }
@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()); }
assertNotNull(found); assertEquals(msg.getId(), found.getId()); assertEquals(msg.getTimeout(), found.getTimeout());
assertNotNull(found); assertEquals(msg.getId(), found.getId()); assertEquals(msg.getTimeout(), found.getTimeout());
assertNotNull(found); assertEquals(msg.getId(), found.getId()); assertEquals(msg.getTimeout(), found.getTimeout());