public static void main(String[] args) throws Exception { CuratorFramework client = null; DistributedDelayQueue<String> queue = null; try { client = CuratorClientFactory.newClient(); client .getCuratorListenable() .addListener( new CuratorListener() { @Override public void eventReceived(CuratorFramework client, CuratorEvent event) throws Exception { System.out.println("CuratorEvent: " + event.getType().name()); } }); client.start(); QueueConsumer<String> consumer = createQueueConsumer(); QueueBuilder<String> builder = QueueBuilder.builder(client, consumer, createQueueSerializer(), PATH); queue = builder.buildDelayQueue(); queue.start(); for (int i = 0; i < 10; i++) { queue.put("test-" + i, System.currentTimeMillis() + 10000); } System.out.println(getCurrentTimeStr() + ": 所有的数据已经生产完毕"); Thread.sleep(20000); } finally { CloseableUtils.closeQuietly(client); CloseableUtils.closeQuietly(queue); } }
public DistributedDelayQueue<String> distributedDelayQueue() throws KafkaException { org.apache.curator.framework.recipes.queue.QueueConsumer<String> consumer = new org.apache.curator.framework.recipes.queue.QueueConsumer<String>() { @Override public void consumeMessage(String message) { logger.debug("message received from delayQ: {}", message); JsonObject jsonObject = Json.createReader(new StringReader(message)).readObject(); String queue = jsonObject.getJsonObject(PAYLOAD).getString(QUEUE); String queueMessage = jsonObject.getJsonObject(PAYLOAD).getJsonObject(PAYLOAD).toString(); kafkaClient.sendMessage(new KafkaMessage(queue, queueMessage)); } @Override public void stateChanged(CuratorFramework client, ConnectionState newState) { if (newState.equals(ConnectionState.SUSPENDED)) { logger.error("screwed"); } } }; QueueSerializer<String> serializer = new QueueSerializer<String>() { @Override public byte[] serialize(String item) { return item.getBytes(Charset.defaultCharset()); } @Override public String deserialize(byte[] bytes) { return new String(bytes, Charset.defaultCharset()); } }; QueueBuilder<String> builder = QueueBuilder.builder(curatorFramework, consumer, serializer, DELAY_Q_PATH); delayQ = builder.buildDelayQueue(); try { delayQ.start(); } catch (Exception e) { logger.error("unable to start delayQ", e); throw new KafkaException("unable to start delayQ", e); } return delayQ; }