package org.tp23.yeti; import org.mpilone.yeti.Frame; import org.mpilone.yeti.FrameBuilder; import org.mpilone.yeti.client.StompClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.TimeUnit; import static java.lang.Thread.sleep; import static java.util.concurrent.TimeUnit.*; /** * xtomp client using Yeti https://github.com/mpilone/hazelcastmq/blob/master/yeti/README.md * * @author teknopaul */ public class XtompYetiClient { private static final Logger LOG = LoggerFactory.getLogger(XtompYetiClient.class); private static final String HOST = "localhost"; private static final int PORT = 61613; private static final String DESTINATION = "memtop-a"; public static void main(String[] args) throws InterruptedException { StompClient.QueuingFrameListener msgListener = new StompClient.QueuingFrameListener(); StompClient client = new StompClient(true, HOST, PORT); client.connect(); // N.B. subscription ID needs to be a number as a String "1" client.subscribe(FrameBuilder.subscribe(DESTINATION, "1").build(), msgListener); new Thread( () -> { try { // Wait for the messages to arrive. We should get two of them. Frame msg1 = msgListener.poll(2, SECONDS); LOG.info("Got message 1: " + msg1.getBodyAsString()); Frame msg2 = msgListener.poll(160100L, MILLISECONDS); LOG.info("Got message 2: " + msg2.getBodyAsString()); // polite disconnect client.unsubscribe(FrameBuilder.unsubscribe("1").build()); client.disconnect(); } catch (InterruptedException ex) { LOG.error("Never got no message"); System.exit(1); } }).start(); sleep(100l); client.send(FrameBuilder.send("memtop-a", "\nHello\nWorld!\n").build()); // test heart-beating by waiting for longer than default timeout. sleep(160000L); client.send(FrameBuilder.send("memtop-a", "message 2").build()); } }