void publishInts(ByteString topic, int start, int num) throws Exception { for (int i = 0; i < num; i++) { org.apache.hedwig.protocol.PubSubProtocol.Message msg = org.apache.hedwig.protocol.PubSubProtocol.Message.newBuilder() .setBody(ByteString.copyFromUtf8("" + (start + i))) .build(); publisher.publish(topic, msg); } }
void sendXExpectLastY(ByteString topic, ByteString subid, final int x, final int y) throws Exception { for (int i = 0; i < x; i++) { publisher.publish( topic, org.apache.hedwig.protocol.PubSubProtocol.Message.newBuilder() .setBody(ByteString.copyFromUtf8(String.valueOf(i))) .build()); } org.apache.hedwig.protocol.PubSubProtocol.SubscriptionOptions opts = org.apache.hedwig.protocol.PubSubProtocol.SubscriptionOptions.newBuilder() .setCreateOrAttach( org.apache.hedwig.protocol.PubSubProtocol.SubscribeRequest.CreateOrAttach.ATTACH) .build(); subscriber.subscribe(topic, subid, opts); final AtomicInteger expected = new AtomicInteger(x - y); final CountDownLatch latch = new CountDownLatch(1); subscriber.startDelivery( topic, subid, new org.apache.hedwig.client.api.MessageHandler() { @Override public synchronized void deliver( ByteString topic, ByteString subscriberId, org.apache.hedwig.protocol.PubSubProtocol.Message msg, org.apache.hedwig.util.Callback<Void> callback, Object context) { try { int value = Integer.valueOf(msg.getBody().toStringUtf8()); if (value == expected.get()) { expected.incrementAndGet(); } else { logger.error( "Did not receive expected value, expected {}, got {}", expected.get(), value); expected.set(0); latch.countDown(); } if (expected.get() == x) { latch.countDown(); } callback.operationFinished(context, null); } catch (Exception e) { logger.error("Received bad message", e); latch.countDown(); } } }); assertTrue( "Timed out waiting for messages Y is " + y + " expected is currently " + expected.get(), latch.await(10, TimeUnit.SECONDS)); assertEquals("Should be expected message with " + x, x, expected.get()); subscriber.stopDelivery(topic, subid); subscriber.closeSubscription(topic, subid); }
org.apache.hedwig.protocol.PubSubProtocol.MessageSeqId publish( ByteString topic, ByteString data) throws Exception { org.apache.hedwig.protocol.PubSubProtocol.Message message = org.apache.hedwig.protocol.PubSubProtocol.Message.newBuilder().setBody(data).build(); org.apache.hedwig.protocol.PubSubProtocol.PublishResponse resp = publisher.publish(topic, message); if (null == resp) { return null; } return resp.getPublishedMsgId(); }
@Override public void deliver( ByteString t, ByteString s, org.apache.hedwig.protocol.PubSubProtocol.Message msg, org.apache.hedwig.util.Callback<Void> callback, Object context) { if (!t.equals(topic) || !s.equals(subId)) { return; } int num = Integer.parseInt(msg.getBody().toStringUtf8()); if (num == next) { latch.countDown(); ++next; } callback.operationFinished(context, null); }