Example usage for org.springframework.messaging.support GenericMessage GenericMessage

List of usage examples for org.springframework.messaging.support GenericMessage GenericMessage

Introduction

In this page you can find the example usage for org.springframework.messaging.support GenericMessage GenericMessage.

Prototype

public GenericMessage(T payload) 

Source Link

Document

Create a new message with the given payload.

Usage

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 {/*from w  w w . ja va2s.c o  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 testConcurrentWritersWithTimeout() throws Exception {
    final MessageGroupQueue queue = new MessageGroupQueue(new SimpleMessageStore(), 1, 1);
    final AtomicReference<Boolean> booleanHolder1 = new AtomicReference<Boolean>(true);
    final AtomicReference<Boolean> booleanHolder2 = new AtomicReference<Boolean>(true);
    final AtomicReference<Boolean> booleanHolder3 = new AtomicReference<Boolean>(true);

    Thread t1 = new Thread(() -> {
        try {// w  w w .  j  a  va 2 s  .c  o  m
            booleanHolder1.set(queue.offer(new GenericMessage<String>("Hi-1"), 2, TimeUnit.SECONDS));
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    Thread t2 = new Thread(() -> {
        try {
            boolean offered = queue.offer(new GenericMessage<String>("Hi-2"), 2, TimeUnit.SECONDS);
            booleanHolder2.set(offered);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    Thread t3 = new Thread(() -> {
        try {
            boolean offered = queue.offer(new GenericMessage<String>("Hi-3"), 2, TimeUnit.SECONDS);
            booleanHolder3.set(offered);
        } catch (Exception e) {
            LogFactory.getLog(getClass()).error("queue offer failed", e);
        }
    });
    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(100);
    t3.start();
    Thread.sleep(4000);
    assertTrue(booleanHolder1.get());
    assertFalse(booleanHolder2.get());
    assertFalse(booleanHolder3.get());
}

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 . jav a  2  s .c  om*/
            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.jdbc.MessageGroupQueueTests.java

@Test
public void validateMgqInterruptionStoreLock() throws Exception {

    MessageGroupStore mgs = Mockito.mock(MessageGroupStore.class);
    Mockito.doAnswer(invocation -> {// www.j ava2 s. c o m
        Thread.sleep(5000);
        return null;
    }).when(mgs).addMessageToGroup(Mockito.any(Integer.class), Mockito.any(Message.class));

    MessageGroup mg = Mockito.mock(MessageGroup.class);
    Mockito.when(mgs.getMessageGroup(Mockito.any())).thenReturn(mg);
    Mockito.when(mg.size()).thenReturn(0);

    final MessageGroupQueue queue = new MessageGroupQueue(mgs, 1, 1);

    final AtomicReference<InterruptedException> exceptionHolder = new AtomicReference<InterruptedException>();

    Thread t1 = new Thread(() -> queue.offer(new GenericMessage<String>("hello")));
    t1.start();
    Thread.sleep(500);
    Thread t2 = new Thread(() -> {
        queue.offer(new GenericMessage<String>("hello"));
        try {
            queue.offer(new GenericMessage<String>("hello"), 100, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            exceptionHolder.set(e);
        }
    });
    t2.start();
    Thread.sleep(1000);
    t2.interrupt();
    Thread.sleep(1000);
    assertTrue(exceptionHolder.get() instanceof InterruptedException);
}

From source file:org.springframework.integration.jms.ChannelPublishingJmsMessageListenerTests.java

private void startBackgroundReplier(final PollableChannel channel) {
    new SimpleAsyncTaskExecutor().execute(() -> {
        Message<?> request = channel.receive(50000);
        Message<?> reply = new GenericMessage<String>(((String) request.getPayload()).toUpperCase());
        ((MessageChannel) request.getHeaders().getReplyChannel()).send(reply, 5000);
    });/*from ww w  .  j ava2 s .  co  m*/
}

From source file:org.springframework.integration.jms.request_reply.RequestReplyScenariosWithTempReplyQueuesTests.java

@SuppressWarnings("resource")
@Test//w w w.  j  a  v  a  2s .  co  m
public void messageCorrelationBasedOnRequestMessageId() throws Exception {
    ActiveMqTestUtils.prepare();

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "producer-temp-reply-consumers.xml", this.getClass());
    RequestReplyExchanger gateway = context.getBean(RequestReplyExchanger.class);
    CachingConnectionFactory connectionFactory = context.getBean(CachingConnectionFactory.class);
    final JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);

    final Destination requestDestination = context.getBean("siOutQueue", Destination.class);

    new Thread(() -> {
        final Message requestMessage = jmsTemplate.receive(requestDestination);
        Destination replyTo = null;
        try {
            replyTo = requestMessage.getJMSReplyTo();
        } catch (Exception e) {
            fail();
        }
        jmsTemplate.send(replyTo, (MessageCreator) session -> {
            try {
                TextMessage message = session.createTextMessage();
                message.setText("bar");
                message.setJMSCorrelationID(requestMessage.getJMSMessageID());
                return message;
            } catch (Exception e) {
                // ignore
            }
            return null;
        });
    }).start();
    gateway.exchange(new GenericMessage<String>("foo"));
    context.close();
}

From source file:org.springframework.integration.jms.request_reply.RequestReplyScenariosWithTempReplyQueuesTests.java

@Test
public void messageCorrelationBasedOnRequestCorrelationIdTimedOutFirstReply() throws Exception {
    ActiveMqTestUtils.prepare();//from   w ww.j a v  a 2 s  .c  o  m
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "producer-temp-reply-consumers.xml", this.getClass());
    RequestReplyExchanger gateway = context.getBean(RequestReplyExchanger.class);
    ConnectionFactory connectionFactory = context.getBean(ConnectionFactory.class);

    final Destination requestDestination = context.getBean("siOutQueue", Destination.class);

    DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
    dmlc.setConnectionFactory(connectionFactory);
    dmlc.setDestination(requestDestination);
    dmlc.setMessageListener((SessionAwareMessageListener<Message>) (message, session) -> {
        Destination replyTo = null;
        try {
            replyTo = message.getJMSReplyTo();
        } catch (Exception e1) {
            fail();
        }
        String requestPayload = (String) extractPayload(message);
        if (requestPayload.equals("foo")) {
            try {
                Thread.sleep(6000);
            } catch (Exception e2) {
                /*ignore*/ }
        }
        try {
            TextMessage replyMessage = session.createTextMessage();
            replyMessage.setText(requestPayload);
            replyMessage.setJMSCorrelationID(message.getJMSMessageID());
            MessageProducer producer = session.createProducer(replyTo);
            producer.send(replyMessage);
        } catch (Exception e3) {
            // ignore. the test will fail
        }
    });
    dmlc.afterPropertiesSet();
    dmlc.start();

    try {
        gateway.exchange(new GenericMessage<String>("foo"));
    } catch (Exception e) {
        // ignore
    }
    Thread.sleep(1000);
    try {
        assertEquals("bar", gateway.exchange(new GenericMessage<String>("bar")).getPayload());
    } catch (Exception e) {
        e.printStackTrace();
        fail();
    }
    context.close();
}

From source file:org.springframework.integration.jms.request_reply.RequestReplyScenariosWithTempReplyQueuesTests.java

/**
 * Validates that JOG will recreate a temporary queue
 * once a failure detected and that the messages will still be properly correlated
 *//* ww  w . j av a2s  . co m*/
@Test
public void brokenBrokerTest() throws Exception {

    BrokerService broker = new BrokerService();
    broker.setPersistent(false);
    broker.setUseJmx(false);
    broker.setTransportConnectorURIs(new String[] { "tcp://localhost:61623" });
    broker.setDeleteAllMessagesOnStartup(true);
    broker.start();

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("broken-broker.xml",
            this.getClass());

    final RequestReplyExchanger gateway = context.getBean(RequestReplyExchanger.class);

    int replyCounter = 0;
    int timeoutCounter = 0;
    for (int i = 0; i < 50; i++) {
        try {
            assertEquals(i + "", gateway.exchange(new GenericMessage<String>(String.valueOf(i))).getPayload());
            replyCounter++;
        } catch (Exception e) {
            timeoutCounter++;
        }
        if (i == 0 || i == 20 || i == 40) {
            Object replyDestination = TestUtils.getPropertyValue(context.getBean("jog"),
                    "handler.replyDestination");
            if (replyDestination != null) {
                broker.removeDestination((ActiveMQDestination) replyDestination);
            }
        }
    }
    assertEquals(50, replyCounter + timeoutCounter);
    context.close();
}

From source file:org.springframework.integration.jms.request_reply.RequestReplyScenariosWithTempReplyQueuesTests.java

@Test
public void testConcurrently() throws Exception {
    ActiveMqTestUtils.prepare();//from ww  w.j  av a2 s  .c o  m
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "mult-producer-and-consumers-temp-reply.xml", this.getClass());
    final RequestReplyExchanger gateway = context.getBean(RequestReplyExchanger.class);
    Executor executor = Executors.newFixedThreadPool(10);
    final int testNumbers = 100;
    final CountDownLatch latch = new CountDownLatch(testNumbers);
    final AtomicInteger failures = new AtomicInteger();
    final AtomicInteger timeouts = new AtomicInteger();
    final AtomicInteger missmatches = new AtomicInteger();
    for (int i = 0; i < testNumbers; i++) {
        final int y = i;
        executor.execute(() -> {
            try {

                String reply = (String) gateway.exchange(new GenericMessage<String>(String.valueOf(y)))
                        .getPayload();
                if (!String.valueOf(y).equals(reply)) {
                    missmatches.incrementAndGet();
                }
            } catch (Exception e) {
                if (e instanceof MessageDeliveryException) {
                    timeouts.incrementAndGet();
                } else {
                    failures.incrementAndGet();
                }
            }
            //               if (latch.getCount()%100 == 0){
            //                  long count = testNumbers-latch.getCount();
            //                  if (count > 0){
            //                     print(failures, timeouts, missmatches, testNumbers-latch.getCount());
            //                  }
            //               }
            latch.countDown();
        });
    }
    latch.await();
    print(failures, timeouts, missmatches, testNumbers);
    Thread.sleep(5000);
    assertEquals(0, missmatches.get());
    assertEquals(0, failures.get());
    assertEquals(0, timeouts.get());
    context.close();
}

From source file:org.springframework.integration.mqtt.DownstreamExceptionTests.java

@Test
public void testNoErrorChannel() throws Exception {
    service.n = 0;//from  w  w  w. j a v a2 s  .  c  om
    Log logger = spy(TestUtils.getPropertyValue(noErrorChannel, "logger", Log.class));
    final CountDownLatch latch = new CountDownLatch(1);
    doAnswer(invocation -> {
        if (((String) invocation.getArgument(0)).contains("Unhandled")) {
            latch.countDown();
        }
        return null;
    }).when(logger).error(anyString(), any(Throwable.class));
    new DirectFieldAccessor(noErrorChannel).setPropertyValue("logger", logger);
    MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out");
    adapter.setDefaultTopic("mqtt-fooEx1");
    adapter.setBeanFactory(mock(BeanFactory.class));
    adapter.afterPropertiesSet();
    adapter.start();
    adapter.handleMessage(new GenericMessage<String>("foo"));
    service.barrier.await(10, TimeUnit.SECONDS);
    service.barrier.reset();
    adapter.handleMessage(new GenericMessage<String>("foo"));
    service.barrier.await(10, TimeUnit.SECONDS);
    assertTrue(latch.await(10, TimeUnit.SECONDS));
    verify(logger).error(contains("Unhandled exception for"), any(Throwable.class));
    service.barrier.reset();
    adapter.stop();
}