[ 
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.

Reply via email to