Remo Gloor created AMQ-4337:
-------------------------------

             Summary: Messages with AMQ_SCHEDULED_DELAY do not respect 
transactions
                 Key: AMQ-4337
                 URL: https://issues.apache.org/jira/browse/AMQ-4337
             Project: ActiveMQ
          Issue Type: Improvement
            Reporter: Remo Gloor


Currently delayed messages are delivered even if the session it was sent in is 
rolled back. According to 
http://activemq.2283324.n4.nabble.com/AMQ-SCHEDULED-DELAY-and-transactional-boundaries-td4658339.html
 this is because the message can be delivered far in the future and the 
transaction would take to long.

I don't agree with that argument. The transaction can be short living. It is 
only the enqueuing of the delayed message in the broker that has to be part of 
the transaction. The delivery to the consumer is not part of the transaction 
anymore.

e.g. consider the scenario in the following preudo code:

    while (application_runs)
    try{
        msg = session.Receive();
        session.SendDelayed(anotherMessage);
        if (random(5) != 0) throw exception;
        session.Commit();
    } catch { session.Rollback; }

Currently a delayed message is sent for each retry. So we will get a lot more 
messages in the future as we would expect. When delayed messages would respect 
transactions just the successful ones would be enqueued. The other ones are 
rolledback with the transaction.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to