[
https://issues.apache.org/activemq/browse/AMQNET-176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Ellis updated AMQNET-176:
--------------------------------
Attachment: ActiveMQ-Test.zip
I have attached the test project that I put together. It is a Visual Studio
2005 project. The config file is configured to point to localhost. I have
just tested this with ActiveMQ 5.2 and a recent 5.3 snapshot.
To test the scenario perform the following operations:
1. Start the ActiveMQ test app.
2. Click Connection -> Connect
3. Click Session -> Create -> Transactional
4. Enter the queue name (or leave it as MyQueue)
5. Click Create Consumer
6. Click Add listener
7. Click Connection -> Start
8. Using the ActiveMQ web admin send a message to the queue
9. The message will arrive on the consumer.
10. Click Connection -> Kill Process
11. Perform steps 1-7 again
Notice that the message is not re-delivered, but is still shown on the queue
when viewing the web admin.
You can also test closing the consumer/session by just closing the relevant
windows. You can also run multiple instances of the application which is
useful for testing delivery across connections.
> Messages received by a transactional session are not redelivered when the
> session dies before being commited.
> -------------------------------------------------------------------------------------------------------------
>
> Key: AMQNET-176
> URL: https://issues.apache.org/activemq/browse/AMQNET-176
> Project: ActiveMQ .Net
> Issue Type: Bug
> Components: ActiveMQ Client
> Affects Versions: 1.1.0
> Environment: .NET 2.0 on Windows XP
> Reporter: Daniel Ellis
> Assignee: Jim Gomes
> Fix For: 1.2.0
>
> Attachments: ActiveMQ-Test.zip, Message to JMS transactional
> session.pcap, Message to NMS transactional session.pcap
>
>
> In our testing we have discovered that messages are not redelivered as
> expected when we are using a transactional session. The test goes as
> follows:-
> 1. Create a connection and a transactional session.
> 2. Create a queue consumer, add a listener and start the connection.
> 3. Add a message to the queue, the message will arrive on the consumer.
> 4. Kill the session (either dispose of the session and connection, or just
> kill the process)
> 5. Perform steps 1 & 2 again.
> Note that the message is not redelivered.
> We expect the message to be redelivered because the transaction was never
> committed. Looking at the Queues page on the web admin, you can see the
> queue count is still 1. So the message is still on the broker.
> To diagnose whether this is an NMS issue or an ActiveMQ issue, I created a
> Java application to test this issue using JMS.
> The resulting behaviour is as expected when using JMS. After the message is
> received, I can either cleanly dispose the session, or kill the application,
> and the message will be redelivered next time you start the app.
> I was a little confused as to why the message did not get redelivered, in the
> example where I simply kill the process. I would expect the broker to handle
> NMS and JMS clients the same, as the TCP connection would simply be
> terminated.
> I then noticed a difference between NMS and JMS, when looking in the web
> admin. When a message arrives on a JMS client the queue count shows 1, and
> clicking on the queue shows the message still on the queue. When a message
> arrives on an NMS client, the queue count goes to 1, but clicking on the
> queue shows no messages.
> Clearly, there is a difference between how JMS and NMS handle an incoming
> message on a transactional session. Could it be that NMS is sending an ack
> for each message when it shouldn't?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.