Example usage for org.springframework.integration.store MessageGroupQueue poll

List of usage examples for org.springframework.integration.store MessageGroupQueue poll

Introduction

In this page you can find the example usage for org.springframework.integration.store MessageGroupQueue poll.

Prototype

@Override
    public Message<?> poll(long timeout, TimeUnit unit) throws InterruptedException 

Source Link

Usage

From source file:org.springframework.integration.jdbc.MessageGroupQueueTests.java

@Test
public void testConcurrentReadWrite() throws Exception {
    final MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), 1, 1);
    final AtomicReference<Message<?>> messageHolder = new AtomicReference<Message<?>>();

    Thread t1 = new Thread(() -> {
        try {/*from www .  ja  va 2  s.  c o  m*/
            messageHolder.set(queue.poll(1000, TimeUnit.SECONDS));
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue poll failed", e);
        }
    });
    Thread t2 = new Thread(() -> {
        try {
            queue.offer(new GenericMessage<String>("hello"), 1000, TimeUnit.SECONDS);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    t1.start();
    t2.start();
    Thread.sleep(1000);
    assertTrue(messageHolder.get() instanceof Message);
}

From source file:org.springframework.integration.jdbc.MessageGroupQueueTests.java

@Test
public void testConcurrentWriteRead() throws Exception {
    final MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), 1, 1);
    final AtomicReference<Message<?>> messageHolder = new AtomicReference<Message<?>>();

    queue.offer(new GenericMessage<String>("hello"), 1000, TimeUnit.SECONDS);

    Thread t1 = new Thread(() -> {
        try {/*from   ww w. jav a2s. c  om*/
            queue.offer(new GenericMessage<String>("Hi"), 1000, TimeUnit.SECONDS);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    Thread t2 = new Thread(() -> {
        try {
            queue.poll(1000, TimeUnit.SECONDS);
            messageHolder.set(queue.poll(1000, TimeUnit.SECONDS));
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue poll failed", e);
        }
    });

    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(1000);
    assertTrue(messageHolder.get().getPayload().equals("Hi"));
}

From source file:org.springframework.integration.jdbc.MessageGroupQueueTests.java

@Test
public void testConcurrentReadersWithTimeout() throws Exception {
    final MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), 1, 1);
    final AtomicReference<Message<?>> messageHolder1 = new AtomicReference<Message<?>>();
    final AtomicReference<Message<?>> messageHolder2 = new AtomicReference<Message<?>>();
    final AtomicReference<Message<?>> messageHolder3 = new AtomicReference<Message<?>>();

    Thread t1 = new Thread(() -> {
        try {/*  w ww.j  a va2 s . co m*/
            messageHolder1.set(queue.poll(10, TimeUnit.SECONDS));
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue poll failed", e);
        }
    });
    Thread t2 = new Thread(() -> {
        try {
            messageHolder2.set(queue.poll(10, TimeUnit.SECONDS));
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue poll failed", e);
        }
    });
    Thread t3 = new Thread(() -> {
        try {
            messageHolder3.set(queue.poll(10, TimeUnit.SECONDS));
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue poll failed", e);
        }
    });
    Thread t4 = new Thread(() -> {
        try {
            queue.offer(new GenericMessage<String>("Hi"), 10, TimeUnit.SECONDS);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(1000);
    t3.start();
    Thread.sleep(1000);
    t4.start();
    Thread.sleep(1000);
    assertNotNull(messageHolder1.get());
    assertEquals("Hi", messageHolder1.get().getPayload());
    Thread.sleep(4000);
    assertTrue(messageHolder2.get() == null);
}

From source file:org.springframework.integration.jdbc.MessageGroupQueueTests.java

@Test
public void testConcurrentWriteReadMulti() throws Exception {
    final MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), 1, 4);
    final AtomicReference<Message<?>> messageHolder = new AtomicReference<Message<?>>();

    queue.offer(new GenericMessage<String>("hello"), 1000, TimeUnit.SECONDS);

    Thread t1 = new Thread(() -> {
        try {//  w w  w. j a v a 2 s.  c  o m
            queue.offer(new GenericMessage<String>("Hi"), 1000, TimeUnit.SECONDS);
            queue.offer(new GenericMessage<String>("Hi"), 1000, TimeUnit.SECONDS);
            queue.offer(new GenericMessage<String>("Hi"), 1000, TimeUnit.SECONDS);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    Thread t2 = new Thread(() -> {
        try {
            queue.poll(1000, TimeUnit.SECONDS);
            messageHolder.set(queue.poll(1000, TimeUnit.SECONDS));
            queue.poll(1000, TimeUnit.SECONDS);
            queue.poll(1000, TimeUnit.SECONDS);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue poll failed", e);
        }
    });

    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(1000);
    assertTrue(messageHolder.get().getPayload().equals("Hi"));
    assertNull(queue.poll(5, TimeUnit.SECONDS));
}

From source file:org.springframework.integration.store.MessageGroupQueueTests.java

@Test
public void testPutAndPoll() throws Exception {
    MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), "FOO");
    queue.put(new GenericMessage<String>("foo"));
    Message<?> result = queue.poll(100, TimeUnit.MILLISECONDS);
    assertNotNull(result);// w ww .  j  ava  2 s.c  o  m
}

From source file:org.springframework.integration.store.MessageGroupQueueTests.java

@Test
public void testSize() throws Exception {
    MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), "FOO");
    queue.put(new GenericMessage<String>("foo"));
    assertEquals(1, queue.size());/*from  w  w w. j a v a  2 s.  c  om*/
    queue.poll(100, TimeUnit.MILLISECONDS);
    assertEquals(0, queue.size());
}

From source file:org.springframework.integration.store.MessageGroupQueueTests.java

@Test
public void testCapacityAfterExpiry() throws Exception {
    SimpleMessageStore messageGroupStore = new SimpleMessageStore();
    MessageGroupQueue queue = new MessageGroupQueue(messageGroupStore, "FOO", 2);
    queue.put(new GenericMessage<String>("foo"));
    assertEquals(1, queue.remainingCapacity());
    queue.put(new GenericMessage<String>("bar"));
    assertEquals(0, queue.remainingCapacity());
    Message<?> result = queue.poll(100, TimeUnit.MILLISECONDS);
    assertNotNull(result);/* w  w w .  j a v  a 2s .c om*/
    assertEquals(1, queue.remainingCapacity());
}

From source file:org.springframework.integration.store.MessageGroupQueueTests.java

private void doTestConcurrentAccess(int concurrency, final int maxPerTask, final Set<String> set)
        throws Exception {

    SimpleMessageStore messageGroupStore = new SimpleMessageStore();
    final MessageGroupQueue queue = new MessageGroupQueue(messageGroupStore, "FOO");
    ExecutorService executorService = Executors.newCachedThreadPool();
    CompletionService<Boolean> completionService = new ExecutorCompletionService<Boolean>(executorService);

    for (int i = 0; i < concurrency; i++) {

        final int big = i;

        completionService.submit(new Callable<Boolean>() {
            public Boolean call() throws Exception {
                boolean result = true;
                for (int j = 0; j < maxPerTask; j++) {
                    result &= queue.add(new GenericMessage<String>("count=" + big + ":" + j));
                    if (!result) {
                        logger.warn("Failed to add");
                    }//from ww w  .  j  a va2  s  .c om
                }
                return result;
            }
        });

        completionService.submit(new Callable<Boolean>() {
            public Boolean call() throws Exception {
                boolean result = true;
                for (int j = 0; j < maxPerTask; j++) {
                    @SuppressWarnings("unchecked")
                    Message<String> item = (Message<String>) queue.poll(10, TimeUnit.SECONDS);
                    result &= item != null;
                    if (!result) {
                        logger.warn("Failed to poll");
                    } else if (set != null) {
                        synchronized (set) {
                            set.add(item.getPayload());
                        }
                    }
                }
                return result;
            }
        });

        messageGroupStore.expireMessageGroups(-10000);

    }

    for (int j = 0; j < 2 * concurrency; j++) {
        assertTrue(completionService.take().get());
    }

    if (set != null) {
        // Ensure all items polled are unique
        assertEquals(concurrency * maxPerTask, set.size());
    }

    assertEquals(0, queue.size());
    messageGroupStore.expireMessageGroups(-10000);
    assertEquals(Integer.MAX_VALUE, queue.remainingCapacity());

    executorService.shutdown();

}