I have a problem receiving from TestAmqpBroker.exe if the ReceiverLink has previously tried to receive.
Steps:
1) Create "receiverConnection"
2) Create first "receiverSession" and "receiverLink"
3) Try to receive message with first "receiverLink" (no message yet)
4) Close "receiverSession" and "receiverLink" (not "receiverConnection")
5) Create second "receiverSession" and "receiverLink"
6) Try to receive message with second "receiverLink" (no message yet)
7) Create "senderConnection", "senderSession" and "senderLink"
8) Send message
9) Try to receive message with second "receiverLink" (expected to receive message here)
It works if step 6) if left out.
When testing with another broker (EDX toolbox) then it works fine.
// First ReceiveLink:
// - No message received
// - Session and ReceiverLink closed
Session firstReceiveSession = new Session(receiveConnection);
ReceiverLink firstReceiverLink = new ReceiverLink(firstReceiveSession, "receiver-link1", queueName);
await firstReceiverLink.ReceiveAsync(TimeSpan.FromMilliseconds(100));
await firstReceiverLink.CloseAsync();
await firstReceiveSession.CloseAsync();
// Second ReceiveLink:
// - No message received
// - Session and ReceiverLink NOT closed
Session secondReceiveSession = new Session(receiveConnection);
ReceiverLink secondReceiverLink = new ReceiverLink(secondReceiveSession, "receiver-link2", queueName);
await secondReceiverLink.ReceiveAsync(TimeSpan.FromMilliseconds(100)); // FIX: Remove this line
// SenderLink:
// - Message sent
// - Connection, Session and SenderLink NOT closed
Connection senderConnection = await connectionFactory.CreateAsync(address);
Session senderSession = new Session(senderConnection);
SenderLink senderLink = new SenderLink(senderSession, "sender-link", queueName);
await senderLink.SendAsync(new Message(senderMessage));
Hi,
I have a problem receiving from TestAmqpBroker.exe if the ReceiverLink has previously tried to receive.
Steps:
1) Create "receiverConnection" 2) Create first "receiverSession" and "receiverLink" 3) Try to receive message with first "receiverLink" (no message yet) 4) Close "receiverSession" and "receiverLink" (not "receiverConnection") 5) Create second "receiverSession" and "receiverLink" 6) Try to receive message with second "receiverLink" (no message yet) 7) Create "senderConnection", "senderSession" and "senderLink" 8) Send message 9) Try to receive message with second "receiverLink" (expected to receive message here)
When testing with another broker (EDX toolbox) then it works fine.
Is this a bug?
Best Regards, Anders Havn
` using Amqp;
string credentials = "guest:guest"; string host = "localhost:5672"; string connectionString = "amqp://" + credentials + "@" + host;
string queueName = "TestQueue";
Address address = new Address(connectionString); ConnectionFactory connectionFactory = new ConnectionFactory();
var senderMessage = "test";
// Connection reused for receiver sessions Connection receiveConnection = await connectionFactory.CreateAsync(address);
// First ReceiveLink: // - No message received // - Session and ReceiverLink closed Session firstReceiveSession = new Session(receiveConnection); ReceiverLink firstReceiverLink = new ReceiverLink(firstReceiveSession, "receiver-link1", queueName); await firstReceiverLink.ReceiveAsync(TimeSpan.FromMilliseconds(100)); await firstReceiverLink.CloseAsync(); await firstReceiveSession.CloseAsync();
// Second ReceiveLink: // - No message received // - Session and ReceiverLink NOT closed Session secondReceiveSession = new Session(receiveConnection); ReceiverLink secondReceiverLink = new ReceiverLink(secondReceiveSession, "receiver-link2", queueName); await secondReceiverLink.ReceiveAsync(TimeSpan.FromMilliseconds(100)); // FIX: Remove this line
// SenderLink: // - Message sent // - Connection, Session and SenderLink NOT closed Connection senderConnection = await connectionFactory.CreateAsync(address); Session senderSession = new Session(senderConnection); SenderLink senderLink = new SenderLink(senderSession, "sender-link", queueName); await senderLink.SendAsync(new Message(senderMessage));
// Second ReceiveLink: var receivedMessage = await secondReceiverLink.ReceiveAsync(TimeSpan.FromMilliseconds(2000)); if (receivedMessage == null) { Console.WriteLine("No message received"); } else { Console.WriteLine($"Second message received: {receivedMessage.Body}"); secondReceiverLink.Accept(receivedMessage); } await secondReceiverLink.CloseAsync(); await secondReceiveSession.CloseAsync(); await receiveConnection.CloseAsync();
await senderLink.CloseAsync(); await senderSession.CloseAsync(); await senderConnection.CloseAsync(); `