You have to unsubscribe yourself. To unsubscribe, send a short email to users-unsubscr...@activemq.apache.org.
On Apr 19, 2017 3:51 AM, "vas u" <mail...@gmail.com> wrote: > please unsubscribe me. > > > > On Tue, Apr 11, 2017 at 3:15 PM, Fabian Gonzalez < > fabian.gonza...@mulesoft.com> wrote: > > > Hello, > > > > This is my first message so greetings for all. > > I am facing a situation where activemq seems not to respect the order > for > > dispatched messages when a redilevery is needed using activemq-client > > 5.14.3. > > > > I am sending 60 messages to a queue with a single consumer, and I've > > noticed that sometimes when a relivery of the message is needed, as a > > consequence of rollback, another message from those 60 message is served > > before the redelivered message. There is no maxRedelivery set. > > > > What I notice debugging ActiveMQMessageConsumer is that the following > > behaviour may occur: > > > > - The 60 messages are dispatched in order in: > > > > ActiveMQMessageConsumer:1376: > > > > @Override > > public void dispatch(MessageDispatch md) { > > MessageListener listener = this.messageListener.get(); > > try { > > clearMessagesInProgress(); > > ... > > > > unconsumedMessage is running so the message is sent to the listener. > > > > - a rollback is performed and the message is redelivered (with a default > > delay): > > > > ActiveMQMessageConsumer:1305: > > > > if (redeliveryDelay > 0 && > > !unconsumedMessages.isClosed()) { > > // Start up the delivery again a little > later. > > session.getScheduler().executeAfterDelay(new > > Runnable() { > > @Override > > public void run() { > > try { > > if (started.get()) { > > start(); > > } > > } catch (JMSException e) { > > > > session.connection.onAsyncException(e); > > } > > } > > }, redeliveryDelay); > > } else { > > start(); > > } > > > > Periodically, the messages enqueued in the session are attempted to be > > consumed (as the unconsumedMessages from the consumer is not running they > > are not sent to the listener to be consumed and they are enqueued as > > unconsumedMessages). > > But if the thread scheduled from redelivery is started when the iteration > > from the unconsumed messages is being performed, the unconsumedMessages > is > > started in: > > > > public void start() throws JMSException { > > if (unconsumedMessages.isClosed()) { > > return; > > } > > started.set(true); > > unconsumedMessages.start(); > > session.executor.wakeup(); > > } > > > > and the message that is being considered from session (in the other > thread) > > is sent to the listener before the redelivered message, which may be an > > error in order. > > > > Is this the expected behaviour? I expected that the order was mantained > in > > this cases. > > > > Thanks in advance for your help and clarification > > >