Search in sources :

Example 6 with RequestReplyExchanger

use of org.springframework.integration.gateway.RequestReplyExchanger in project spring-integration by spring-projects.

the class RequestReplyScenariosWithCachedConsumersTests method messageCorrelationBasedOnRequestCorrelationIdTimedOutFirstReplyOptimized.

@Test
public void messageCorrelationBasedOnRequestCorrelationIdTimedOutFirstReplyOptimized() throws Exception {
    ActiveMqTestUtils.prepare();
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("producer-cached-consumers.xml", this.getClass());
    try {
        RequestReplyExchanger gateway = context.getBean("correlationPropagatingConsumerWithOptimizationDelayFirstReply", RequestReplyExchanger.class);
        final ConnectionFactory connectionFactory = context.getBean("jmsConnectionFactory", ConnectionFactory.class);
        final Destination requestDestination = context.getBean("siOutQueueE", Destination.class);
        final Destination replyDestination = context.getBean("siInQueueE", Destination.class);
        for (int i = 0; i < 3; i++) {
            try {
                gateway.exchange(gateway.exchange(new GenericMessage<String>("foo")));
            } catch (Exception e) {
            /*ignore*/
            }
        }
        final CountDownLatch latch = new CountDownLatch(1);
        new Thread(() -> {
            DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
            dmlc.setConnectionFactory(connectionFactory);
            dmlc.setDestination(requestDestination);
            dmlc.setMessageListener((SessionAwareMessageListener<Message>) (message, session) -> {
                String requestPayload = (String) extractPayload(message);
                try {
                    TextMessage replyMessage = session.createTextMessage();
                    replyMessage.setText(requestPayload);
                    replyMessage.setJMSCorrelationID(message.getJMSCorrelationID());
                    MessageProducer producer = session.createProducer(replyDestination);
                    producer.send(replyMessage);
                } catch (Exception e) {
                // ignore. the test will fail
                }
            });
            dmlc.afterPropertiesSet();
            dmlc.start();
            latch.countDown();
        }).start();
        latch.await();
        TestUtils.getPropertyValue(context.getBean("fastGateway"), "handler", JmsOutboundGateway.class).setReceiveTimeout(10000);
        Thread.sleep(1000);
        assertEquals("bar", gateway.exchange(new GenericMessage<String>("bar")).getPayload());
    } finally {
        context.close();
    }
}
Also used : Destination(javax.jms.Destination) SessionAwareMessageListener(org.springframework.jms.listener.SessionAwareMessageListener) JmsOutboundGateway(org.springframework.integration.jms.JmsOutboundGateway) CountDownLatch(java.util.concurrent.CountDownLatch) MessageTimeoutException(org.springframework.integration.MessageTimeoutException) DefaultMessageListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) GenericMessage(org.springframework.messaging.support.GenericMessage) CachingConnectionFactory(org.springframework.jms.connection.CachingConnectionFactory) ConnectionFactory(javax.jms.ConnectionFactory) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) RequestReplyExchanger(org.springframework.integration.gateway.RequestReplyExchanger) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) LongRunningIntegrationTest(org.springframework.integration.test.support.LongRunningIntegrationTest) Test(org.junit.Test)

Example 7 with RequestReplyExchanger

use of org.springframework.integration.gateway.RequestReplyExchanger in project spring-integration by spring-projects.

the class RequestReplyScenariosWithCachedConsumersTests method messageCorrelationBasedOnRequestMessageIdNonOptimized.

@Test
public void messageCorrelationBasedOnRequestMessageIdNonOptimized() throws Exception {
    ActiveMqTestUtils.prepare();
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("producer-cached-consumers.xml", this.getClass());
    try {
        RequestReplyExchanger gateway = context.getBean("standardMessageIdCopyingConsumerWithoutOptimization", RequestReplyExchanger.class);
        CachingConnectionFactory connectionFactory = context.getBean(CachingConnectionFactory.class);
        final JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        final Destination requestDestination = context.getBean("siOutQueueNonOptimizedB", Destination.class);
        final Destination replyDestination = context.getBean("siInQueueNonOptimizedB", Destination.class);
        new Thread(() -> {
            final Message requestMessage = jmsTemplate.receive(requestDestination);
            jmsTemplate.send(replyDestination, (MessageCreator) session -> {
                TextMessage message = session.createTextMessage();
                message.setText("bar");
                message.setJMSCorrelationID(requestMessage.getJMSMessageID());
                return message;
            });
        }).start();
        org.springframework.messaging.Message<?> siReplyMessage = gateway.exchange(new GenericMessage<String>("foo"));
        assertEquals("bar", siReplyMessage.getPayload());
    } finally {
        context.close();
    }
}
Also used : Destination(javax.jms.Destination) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) GenericMessage(org.springframework.messaging.support.GenericMessage) MessageCreator(org.springframework.jms.core.MessageCreator) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) RequestReplyExchanger(org.springframework.integration.gateway.RequestReplyExchanger) CachingConnectionFactory(org.springframework.jms.connection.CachingConnectionFactory) JmsTemplate(org.springframework.jms.core.JmsTemplate) TextMessage(javax.jms.TextMessage) LongRunningIntegrationTest(org.springframework.integration.test.support.LongRunningIntegrationTest) Test(org.junit.Test)

Example 8 with RequestReplyExchanger

use of org.springframework.integration.gateway.RequestReplyExchanger in project spring-integration by spring-projects.

the class RequestReplyScenariosWithCachedConsumersTests method messageCorrelationBasedOnRequestMessageIdOptimized.

@Test(expected = MessageTimeoutException.class)
public void messageCorrelationBasedOnRequestMessageIdOptimized() throws Exception {
    ActiveMqTestUtils.prepare();
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("producer-cached-consumers.xml", this.getClass());
    try {
        RequestReplyExchanger gateway = context.getBean("standardMessageIdCopyingConsumerWithOptimization", RequestReplyExchanger.class);
        CachingConnectionFactory connectionFactory = context.getBean(CachingConnectionFactory.class);
        final JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        final Destination requestDestination = context.getBean("siOutQueueOptimizedA", Destination.class);
        final Destination replyDestination = context.getBean("siInQueueOptimizedA", Destination.class);
        new Thread(() -> {
            final Message requestMessage = jmsTemplate.receive(requestDestination);
            jmsTemplate.send(replyDestination, (MessageCreator) session -> {
                TextMessage message = session.createTextMessage();
                message.setText("bar");
                message.setJMSCorrelationID(requestMessage.getJMSMessageID());
                return message;
            });
        }).start();
        gateway.exchange(new GenericMessage<String>("foo"));
    } finally {
        context.close();
    }
}
Also used : Destination(javax.jms.Destination) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) GenericMessage(org.springframework.messaging.support.GenericMessage) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) RequestReplyExchanger(org.springframework.integration.gateway.RequestReplyExchanger) CachingConnectionFactory(org.springframework.jms.connection.CachingConnectionFactory) JmsTemplate(org.springframework.jms.core.JmsTemplate) MessageCreator(org.springframework.jms.core.MessageCreator) TextMessage(javax.jms.TextMessage) LongRunningIntegrationTest(org.springframework.integration.test.support.LongRunningIntegrationTest) Test(org.junit.Test)

Example 9 with RequestReplyExchanger

use of org.springframework.integration.gateway.RequestReplyExchanger in project spring-integration by spring-projects.

the class RequestReplyScenariosWithNonCachedConsumersTests method messageCorrelationBasedOnRequestCorrelationIdNonOptimized.

@Test(expected = MessageTimeoutException.class)
public void messageCorrelationBasedOnRequestCorrelationIdNonOptimized() throws Exception {
    ActiveMqTestUtils.prepare();
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("producer-no-cached-consumers.xml", this.getClass());
    try {
        RequestReplyExchanger gateway = context.getBean("nonoptimized", RequestReplyExchanger.class);
        ConnectionFactory connectionFactory = context.getBean(ConnectionFactory.class);
        final JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        final Destination requestDestination = context.getBean("siOutQueueB", Destination.class);
        final Destination replyDestination = context.getBean("siInQueueB", Destination.class);
        new Thread(() -> {
            final Message requestMessage = jmsTemplate.receive(requestDestination);
            jmsTemplate.send(replyDestination, (MessageCreator) session -> {
                TextMessage message = session.createTextMessage();
                message.setText("bar");
                message.setJMSCorrelationID(requestMessage.getJMSCorrelationID());
                return message;
            });
        }).start();
        gateway.exchange(new GenericMessage<String>("foo"));
    } finally {
        context.close();
    }
}
Also used : Destination(javax.jms.Destination) ConnectionFactory(javax.jms.ConnectionFactory) AbstractApplicationContext(org.springframework.context.support.AbstractApplicationContext) TextMessage(javax.jms.TextMessage) GenericMessage(org.springframework.messaging.support.GenericMessage) Message(javax.jms.Message) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) RequestReplyExchanger(org.springframework.integration.gateway.RequestReplyExchanger) JmsTemplate(org.springframework.jms.core.JmsTemplate) MessageCreator(org.springframework.jms.core.MessageCreator) TextMessage(javax.jms.TextMessage) LongRunningIntegrationTest(org.springframework.integration.test.support.LongRunningIntegrationTest) Test(org.junit.Test)

Example 10 with RequestReplyExchanger

use of org.springframework.integration.gateway.RequestReplyExchanger in project spring-integration by spring-projects.

the class RequestReplyScenariosWithNonCachedConsumersTests method messageCorrelationBasedOnRequestMessageIdNonOptimized.

@Test
public void messageCorrelationBasedOnRequestMessageIdNonOptimized() throws Exception {
    ActiveMqTestUtils.prepare();
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("producer-no-cached-consumers.xml", this.getClass());
    try {
        RequestReplyExchanger gateway = context.getBean("nonoptimizedMessageId", RequestReplyExchanger.class);
        ConnectionFactory connectionFactory = context.getBean(ConnectionFactory.class);
        final JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        final Destination requestDestination = context.getBean("siOutQueueD", Destination.class);
        final Destination replyDestination = context.getBean("siInQueueD", Destination.class);
        new Thread(() -> {
            final Message requestMessage = jmsTemplate.receive(requestDestination);
            jmsTemplate.send(replyDestination, (MessageCreator) session -> {
                TextMessage message = session.createTextMessage();
                message.setText("bar");
                message.setJMSCorrelationID(requestMessage.getJMSMessageID());
                return message;
            });
        }).start();
        org.springframework.messaging.Message<?> siReplyMessage = gateway.exchange(new GenericMessage<String>("foo"));
        assertEquals("bar", siReplyMessage.getPayload());
    } finally {
        context.close();
    }
}
Also used : Destination(javax.jms.Destination) TextMessage(javax.jms.TextMessage) GenericMessage(org.springframework.messaging.support.GenericMessage) Message(javax.jms.Message) MessageCreator(org.springframework.jms.core.MessageCreator) ConnectionFactory(javax.jms.ConnectionFactory) AbstractApplicationContext(org.springframework.context.support.AbstractApplicationContext) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) RequestReplyExchanger(org.springframework.integration.gateway.RequestReplyExchanger) JmsTemplate(org.springframework.jms.core.JmsTemplate) TextMessage(javax.jms.TextMessage) LongRunningIntegrationTest(org.springframework.integration.test.support.LongRunningIntegrationTest) Test(org.junit.Test)

Aggregations

RequestReplyExchanger (org.springframework.integration.gateway.RequestReplyExchanger)27 Test (org.junit.Test)24 ClassPathXmlApplicationContext (org.springframework.context.support.ClassPathXmlApplicationContext)21 LongRunningIntegrationTest (org.springframework.integration.test.support.LongRunningIntegrationTest)18 GenericMessage (org.springframework.messaging.support.GenericMessage)17 Destination (javax.jms.Destination)11 TextMessage (javax.jms.TextMessage)11 Message (javax.jms.Message)10 JmsTemplate (org.springframework.jms.core.JmsTemplate)10 MessageCreator (org.springframework.jms.core.MessageCreator)10 CachingConnectionFactory (org.springframework.jms.connection.CachingConnectionFactory)7 CountDownLatch (java.util.concurrent.CountDownLatch)6 ConnectionFactory (javax.jms.ConnectionFactory)6 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)5 ServiceActivatingHandler (org.springframework.integration.handler.ServiceActivatingHandler)5 Message (org.springframework.messaging.Message)5 MessageDeliveryException (org.springframework.messaging.MessageDeliveryException)5 Date (java.util.Date)4 AbstractApplicationContext (org.springframework.context.support.AbstractApplicationContext)4 QueueChannel (org.springframework.integration.channel.QueueChannel)4