[
https://issues.apache.org/jira/browse/AMQ-4619?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13702748#comment-13702748
]
zachary.zhang commented on AMQ-4619:
------------------------------------
In our scenario, there are many consumers to receive messages,if we send
duplicate messages or losing messages,there isn't a good way to make consumers
to know which message is duplicate or losing.
I noticed there is a rollback methed in session.I plan to use it when producer
throw exception,then resend message ,so the consumer can receive messages
perfectly neither more or less. However, after I tested, the rollback methed
can't destroy the message ,it worked not as JDBC rollback. Is there something
wrong in this solution?
Thanks for your help.
> lose messages in Shared File System Master/Slave while swich master to slave
> quickly and many times
> ----------------------------------------------------------------------------------------------------
>
> Key: AMQ-4619
> URL: https://issues.apache.org/jira/browse/AMQ-4619
> Project: ActiveMQ
> Issue Type: Bug
> Components: JMS client, Message Store
> Affects Versions: 5.8.0
> Environment: pc(computer), windows 7(os), Shared File System
> Master/Slave
> Reporter: zachary.zhang
> Labels: security
> Fix For: 5.x
>
> Original Estimate: 72h
> Remaining Estimate: 72h
>
> There are two activemq instance in my pc, they are in Shared File System
> Master/Slave with kahaDB model.
> 1 set up the consumer listener and receive message use failover protocol .
> 2 set up the producer to send message use failover protocol. the message
> total is 6000.
> 3 close the master actviemq , so the slave can replace the master to work.
> repeat the step 3 many times (more than 5) and quickly.
> result:
> 1 the producer will throw exception several times:
> javax.jms.TransactionRolledBackException: Transaction completion in doubt due
> to failover. Forcing rollback of TX:ID:wcmis175-55198-1372489851858-1:1:643
> at
> org.apache.activemq.state.ConnectionStateTracker.restoreTransactions(ConnectionStateTracker.java:231)
> at
> org.apache.activemq.state.ConnectionStateTracker.restore(ConnectionStateTracker.java:169)
> at
> org.apache.activemq.transport.failover.FailoverTransport.restoreTransport(FailoverTransport.java:821)
> at
> org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:996)
> at
> org.apache.activemq.transport.failover.FailoverTransport$2.iterate(FailoverTransport.java:143)
> at
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:129)
> at
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> at java.lang.Thread.run(Thread.java:722)
> 2 sometimes it will lose messages in consumer side (for example producer send
> 6000 messages ,throw 8 exceptions , the consumer will receive 5998
> messages).I don't know where the lost messages going.
> So ,I think this bug is dangerous if it was really exsit. Sometimes we must
> use failover switch the master and slave,and we don't want to face losing
> messages.
--
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