ActiveMQ: очередь устаревшего закона сохраняет мой порядок сообщений

Я использую ActiveMQ в качестве брокера для передачи сообщений. Сообщения тезисов являются intented, который будет записан в dabatase. Иногда, база данных недостижима или вниз. В этом случае я хочу откатывать свое сообщение для повторения позже этого сообщения, и я хочу продолжить читать другие сообщения.

Этот код хорошо работает, кроме одной точки: откатываемое сообщение блокирует меня от чтения других:

private Connection getConnection() throws JMSException {
    RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
    redeliveryPolicy.setMaximumRedeliveries(3); // will retry 3 times to dequeue rollbacked messages
    redeliveryPolicy.setInitialRedeliveryDelay(5 *1000);  // will wait 5s to read that message

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
    Connection connection = connectionFactory.createConnection();
    ((ActiveMQConnection)connection).setUseAsyncSend(true);
    ((ActiveMQConnection)connection).setDispatchAsync(true);
    ((ActiveMQConnection)connection).setRedeliveryPolicy(redeliveryPolicy);
    ((ActiveMQConnection)connection).setStatsEnabled(true);
    connection.setClientID("myClientID");
    return connection;
}

Я создаю свою сессию этот путь:

session = connection.createSession(true, Session.SESSION_TRANSACTED);

Откат легко спросить:

session.rollback();

Давайте предположим, что у меня есть 3 сообщения в моей очереди:

1: ok
2: KO (will need to be treated again : the message I want to rollback)
3: ok
4: ok

Мой потребитель сделает (линейная последовательность):

commit 1 
rollback 2
wait 5s
rollback 2
wait 5s
rollback 2
put 2 in dead letter queue (ActiveMQ.DLQ)
commit 3
commit 4

Но я хочу:

commit 1
rollback 2
commit 3
commit 4
wait 5s
rollback 2
wait 5s
rollback 2
wait 5s
put 2 in dead letter queue (ActiveMQ.DLQ)

Так, как я могу настроить своего Потребителя для задержки моих откатываемых сообщений позже?

6
задан 2 revs 13 July 2010 в 18:04
поделиться

1 ответ

Используете ли вы в XML-файле конфигурации ActiveMQ? Я не уверен, повлияет ли это на порядок сообщений для повторной отправки или нет. Если вы используете строгую отправку заказов, попробуйте прокомментировать эту политику, чтобы увидеть, изменит ли это поведение.

Брюс

0
ответ дан 16 December 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: