Search in sources :

Example 6 with RedeliveryPolicy

use of org.apache.activemq.RedeliveryPolicy in project activemq-artemis by apache.

the class RedeliveryPolicyTest method testMaximumRedeliveryDelay.

/**
 * @throws Exception
 */
@Test
public void testMaximumRedeliveryDelay() throws Exception {
    // Receive a message with the JMS API
    RedeliveryPolicy policy = connection.getRedeliveryPolicy();
    policy.setInitialRedeliveryDelay(10);
    policy.setUseExponentialBackOff(true);
    policy.setMaximumRedeliveries(-1);
    policy.setRedeliveryDelay(50);
    policy.setMaximumRedeliveryDelay(1000);
    policy.setBackOffMultiplier((short) 2);
    policy.setUseExponentialBackOff(true);
    connection.start();
    Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    ActiveMQQueue destination = new ActiveMQQueue("TEST");
    this.makeSureCoreQueueExist("TEST");
    MessageProducer producer = session.createProducer(destination);
    MessageConsumer consumer = session.createConsumer(destination);
    // Send the messages
    producer.send(session.createTextMessage("1st"));
    producer.send(session.createTextMessage("2nd"));
    session.commit();
    TextMessage m;
    for (int i = 0; i < 10; ++i) {
        // we should be able to get the 1st message redelivered until a
        // session.commit is called
        m = (TextMessage) consumer.receive(2000);
        assertNotNull(m);
        assertEquals("1st", m.getText());
        session.rollback();
    }
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.commit();
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.commit();
    assertTrue(policy.getNextRedeliveryDelay(Long.MAX_VALUE) == 1000);
}
Also used : MessageConsumer(javax.jms.MessageConsumer) RedeliveryPolicy(org.apache.activemq.RedeliveryPolicy) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session) BasicOpenWireTest(org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest) Test(org.junit.Test)

Example 7 with RedeliveryPolicy

use of org.apache.activemq.RedeliveryPolicy in project activemq-artemis by apache.

the class RedeliveryPolicyTest method testGetNext.

@Test
public void testGetNext() throws Exception {
    RedeliveryPolicy policy = new RedeliveryPolicy();
    policy.setInitialRedeliveryDelay(0);
    policy.setRedeliveryDelay(500);
    policy.setBackOffMultiplier((short) 2);
    policy.setUseExponentialBackOff(true);
    long delay = policy.getNextRedeliveryDelay(0);
    assertEquals(500, delay);
    delay = policy.getNextRedeliveryDelay(delay);
    assertEquals(500 * 2, delay);
    delay = policy.getNextRedeliveryDelay(delay);
    assertEquals(500 * 4, delay);
    policy.setUseExponentialBackOff(false);
    delay = policy.getNextRedeliveryDelay(delay);
    assertEquals(500, delay);
}
Also used : RedeliveryPolicy(org.apache.activemq.RedeliveryPolicy) BasicOpenWireTest(org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest) Test(org.junit.Test)

Example 8 with RedeliveryPolicy

use of org.apache.activemq.RedeliveryPolicy in project activemq-artemis by apache.

the class RedeliveryPolicyTest method testZeroMaximumNumberOfRedeliveries.

/**
 * @throws Exception
 */
@Test
public void testZeroMaximumNumberOfRedeliveries() throws Exception {
    // Receive a message with the JMS API
    RedeliveryPolicy policy = connection.getRedeliveryPolicy();
    policy.setInitialRedeliveryDelay(100);
    policy.setUseExponentialBackOff(false);
    // let's set the maximum redeliveries to 0
    policy.setMaximumRedeliveries(0);
    connection.start();
    Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    ActiveMQQueue destination = new ActiveMQQueue("TEST");
    this.makeSureCoreQueueExist("TEST");
    MessageProducer producer = session.createProducer(destination);
    MessageConsumer consumer = session.createConsumer(destination);
    // Send the messages
    producer.send(session.createTextMessage("1st"));
    producer.send(session.createTextMessage("2nd"));
    session.commit();
    TextMessage m;
    m = (TextMessage) consumer.receive(1000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.rollback();
    // the 1st message should not be redelivered since maximumRedeliveries is
    // set to 0
    m = (TextMessage) consumer.receive(1000);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.commit();
}
Also used : MessageConsumer(javax.jms.MessageConsumer) RedeliveryPolicy(org.apache.activemq.RedeliveryPolicy) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session) BasicOpenWireTest(org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest) Test(org.junit.Test)

Example 9 with RedeliveryPolicy

use of org.apache.activemq.RedeliveryPolicy in project activemq-artemis by apache.

the class RedeliveryPolicyTest method testRedeliveryPolicyPerDestination.

@Test
public void testRedeliveryPolicyPerDestination() throws Exception {
    RedeliveryPolicy queuePolicy = new RedeliveryPolicy();
    queuePolicy.setInitialRedeliveryDelay(0);
    queuePolicy.setRedeliveryDelay(1000);
    queuePolicy.setUseExponentialBackOff(false);
    queuePolicy.setMaximumRedeliveries(2);
    RedeliveryPolicy topicPolicy = new RedeliveryPolicy();
    topicPolicy.setInitialRedeliveryDelay(0);
    topicPolicy.setRedeliveryDelay(1000);
    topicPolicy.setUseExponentialBackOff(false);
    topicPolicy.setMaximumRedeliveries(3);
    // Receive a message with the JMS API
    RedeliveryPolicyMap map = connection.getRedeliveryPolicyMap();
    map.put(new ActiveMQTopic(">"), topicPolicy);
    map.put(new ActiveMQQueue(">"), queuePolicy);
    connection.start();
    Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    ActiveMQQueue queue = new ActiveMQQueue("TEST");
    ActiveMQTopic topic = new ActiveMQTopic("TEST");
    this.makeSureCoreQueueExist("TEST");
    MessageProducer producer = session.createProducer(null);
    MessageConsumer queueConsumer = session.createConsumer(queue);
    MessageConsumer topicConsumer = session.createConsumer(topic);
    // Send the messages
    producer.send(queue, session.createTextMessage("1st"));
    producer.send(queue, session.createTextMessage("2nd"));
    producer.send(topic, session.createTextMessage("1st"));
    producer.send(topic, session.createTextMessage("2nd"));
    session.commit();
    TextMessage m;
    m = (TextMessage) queueConsumer.receive(100);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) topicConsumer.receive(100);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) queueConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    m = (TextMessage) topicConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.rollback();
    m = (TextMessage) queueConsumer.receive(100);
    assertNotNull("first immediate redelivery", m);
    m = (TextMessage) topicConsumer.receive(100);
    assertNotNull("first immediate redelivery", m);
    session.rollback();
    m = (TextMessage) queueConsumer.receive(100);
    assertNull("second delivery delayed: " + m, m);
    m = (TextMessage) topicConsumer.receive(100);
    assertNull("second delivery delayed: " + m, m);
    m = (TextMessage) queueConsumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) topicConsumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) queueConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    m = (TextMessage) topicConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.rollback();
    m = (TextMessage) queueConsumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) topicConsumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) queueConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    m = (TextMessage) topicConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.rollback();
    // No third attempt for the Queue consumer
    m = (TextMessage) queueConsumer.receive(2000);
    assertNull(m);
    m = (TextMessage) topicConsumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    m = (TextMessage) queueConsumer.receive(100);
    assertNull(m);
    m = (TextMessage) topicConsumer.receive(100);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.commit();
}
Also used : MessageConsumer(javax.jms.MessageConsumer) ActiveMQTopic(org.apache.activemq.command.ActiveMQTopic) RedeliveryPolicy(org.apache.activemq.RedeliveryPolicy) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) RedeliveryPolicyMap(org.apache.activemq.broker.region.policy.RedeliveryPolicyMap) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session) BasicOpenWireTest(org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest) Test(org.junit.Test)

Example 10 with RedeliveryPolicy

use of org.apache.activemq.RedeliveryPolicy in project activemq-artemis by apache.

the class RedeliveryPolicyTest method testInfiniteMaximumNumberOfRedeliveries.

/**
 * @throws Exception
 */
@Test
public void testInfiniteMaximumNumberOfRedeliveries() throws Exception {
    // Receive a message with the JMS API
    RedeliveryPolicy policy = connection.getRedeliveryPolicy();
    policy.setInitialRedeliveryDelay(100);
    policy.setUseExponentialBackOff(false);
    // let's set the maximum redeliveries to no maximum (ie. infinite)
    policy.setMaximumRedeliveries(-1);
    connection.start();
    Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    ActiveMQQueue destination = new ActiveMQQueue("TEST");
    this.makeSureCoreQueueExist("TEST");
    MessageProducer producer = session.createProducer(destination);
    MessageConsumer consumer = session.createConsumer(destination);
    // Send the messages
    producer.send(session.createTextMessage("1st"));
    producer.send(session.createTextMessage("2nd"));
    session.commit();
    TextMessage m;
    m = (TextMessage) consumer.receive(1000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.rollback();
    // we should be able to get the 1st message redelivered until a
    // session.commit is called
    m = (TextMessage) consumer.receive(1000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.rollback();
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.rollback();
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.rollback();
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.rollback();
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("1st", m.getText());
    session.commit();
    m = (TextMessage) consumer.receive(2000);
    assertNotNull(m);
    assertEquals("2nd", m.getText());
    session.commit();
}
Also used : MessageConsumer(javax.jms.MessageConsumer) RedeliveryPolicy(org.apache.activemq.RedeliveryPolicy) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session) BasicOpenWireTest(org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest) Test(org.junit.Test)

Aggregations

RedeliveryPolicy (org.apache.activemq.RedeliveryPolicy)30 MessageConsumer (javax.jms.MessageConsumer)11 Session (javax.jms.Session)11 BasicOpenWireTest (org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest)11 ActiveMQQueue (org.apache.activemq.command.ActiveMQQueue)11 Test (org.junit.Test)11 MessageProducer (javax.jms.MessageProducer)10 TextMessage (javax.jms.TextMessage)10 ActiveMQConnectionFactory (org.apache.activemq.ActiveMQConnectionFactory)9 Bean (org.springframework.context.annotation.Bean)4 ActiveMQConnection (org.apache.activemq.ActiveMQConnection)3 RedeliveryPolicyMap (org.apache.activemq.broker.region.policy.RedeliveryPolicyMap)3 BrokerService (org.apache.activemq.broker.BrokerService)2 PooledConnectionFactory (org.apache.activemq.pool.PooledConnectionFactory)2 Message (javax.jms.Message)1 Broker (org.apache.activemq.broker.Broker)1 ErrorBroker (org.apache.activemq.broker.ErrorBroker)1 RedeliveryPlugin (org.apache.activemq.broker.util.RedeliveryPlugin)1 ActiveMQTopic (org.apache.activemq.command.ActiveMQTopic)1 PooledConnectionFactory (org.apache.activemq.jms.pool.PooledConnectionFactory)1