Let me start by saying I know schedulerSupport=true needs to be set in
activemq.xml.

I am trying to get the delay router sample posted by G Tully working with an
external instance of activemq (as opposed to an embedded broker).

I have a test case that demonstrate
AMQ_SCHEDULED_DELAY/schedulerSupport=True working properly with spring
alone.  This works as expected with either an embedded broker or an external
instance of activemq.

I have a test case with spring/camel that works with the embeded broker, but
not the external instance of active mq. (this is the same instance that
successfully demonstrates the delay when using spring alone).  

I have tried this with 5.4.2 and 5.6.0 with the same results.

This is the spring only test case that works in both cases

        @ContextConfiguration(locations={"classpath:test.xml"})
        public class TestWithSpring extends AbstractJUnit4SpringContextTests {
                
                @Test
                public void testSchedulerSupport() throws InterruptedException,
JMSException {
                        ActiveMQConnectionFactory factory = 
(ActiveMQConnectionFactory)
applicationContext.getBean("connectionFactory");
                          ActiveMQConnection connection = (ActiveMQConnection)
factory.createConnection();
                          connection.start();
                          Session session = connection.createSession(true,
Session.SESSION_TRANSACTED);
                          ActiveMQQueue destination = new 
ActiveMQQueue("theQueue");
                          MessageProducer producer = 
session.createProducer(destination);
                          MessageConsumer consumer = 
session.createConsumer(destination);
                        
                  TextMessage msg = session.createTextMessage("1st");
                  msg.setLongProperty("AMQ_SCHEDULED_DELAY", 60 * 1000);
                        
                          producer.send(msg);
                          session.commit();
                          TextMessage m;
                          m = (TextMessage)consumer.receive(1000);
                          assertNull(m);
                          m = (TextMessage)consumer.receive(120 * 1000);
                        
                          assertNotNull("got redelivery on second attempt", m);
                          assertEquals("text matches original", "1st", 
m.getText());

                          session.commit();
                        
                }

}

test.xml 
...
   <bean id="connectionFactory"
class="org.apache.activemq.spring.ActiveMQConnectionFactory">
     <property name="brokerURL" value="tcp://127.0.0.1:61616" />
  </bean>


This is the test with camel.  It works if I use the embedded broker but not
the external instance of activemq

        @ContextConfiguration(locations={"classpath:testWithCamel.xml"})
        public class TestWithSpringAndCamel extends
AbstractJUnit4SpringContextTests {
                
                @Test
                public void testSchedulerSupport() throws InterruptedException,
JMSException {
                        ActiveMQConnectionFactory factory = 
(ActiveMQConnectionFactory)
applicationContext.getBean("connectionFactory");
            ActiveMQConnection connection = (ActiveMQConnection)
factory.createConnection();
                                
                RedeliveryPolicy policy = connection.getRedeliveryPolicy();
                policy.setMaximumRedeliveries(0);        
            connection.start();
                          
                          Session session = connection.createSession(true,
Session.SESSION_TRANSACTED);
                          ActiveMQQueue destination = new 
ActiveMQQueue("theQueue");
                          MessageProducer producer = 
session.createProducer(destination);
                          MessageConsumer consumer = 
session.createConsumer(destination);
                        
                  TextMessage msg = session.createTextMessage("1st");
                          producer.send(msg);
                        
                          session.commit();
                        
                        TextMessage m;
                        m = (TextMessage)consumer.receive(1000);
                        assertNotNull(m);
                        
                        String msgTxt = m.getText();
                        assertEquals("1st", m.getText());        

                        session.rollback();                     
                          
                        m = (TextMessage)consumer.receive(7000);
                        assertNull("no immediate redelivery", m);

                        m = (TextMessage)consumer.receive(120000);

                        assertNotNull("got redelivery on second attempt", m);
                        assertEquals("text matches original", "1st", 
m.getText());

                        // came from camel

                        assertTrue("redelivery marker header set, so came from 
camel",
m.getBooleanProperty("CamelRedeliveryMarker"));
                          session.commit();
                }
}


testWithCamel.xml
 <bean id="messageConverter"
class="org.apache.activemq.camel.converter.IdentityMessageReuseConverter" />

  <camel:camelContext id="mzCamel" trace="true">
        
    <camel:route>
       <camel:from uri="activemq:ActiveMQ.DLQ?mapJmsMessage=false"/>
       <camel:setHeader
headerName="CamelRedeliveryMarker"><camel:constant>true</camel:constant></camel:setHeader>
        <camel:setHeader
headerName="AMQ_SCHEDULED_DELAY"><camel:constant>60000</camel:constant></camel:setHeader>
       <camel:to pattern="InOnly"
uri="activemq:theQueue?explicitQosEnabled=true&amp;messageConverter=#messageConverter"
/> 
    </camel:route>
  </camel:camelContext>





 
 

  <bean id="connectionFactory"
class="org.apache.activemq.spring.ActiveMQConnectionFactory">
     <property name="brokerURL" value="tcp://127.0.0.1:61616" />
  </bean>
 

  


--
View this message in context: 
http://camel.465427.n5.nabble.com/AMQ-SCHEDULED-DELAY-problem-with-camel-tp5714870.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to