I am seeing some unexplainable behavior. I have a SenderLink repeatedly sending large messages (larger than the frame size) to a peer. After sending a certain amount of messages the SenderLink will no longer send messages and throws a TimeoutException. The number of messages is always the same. For example I can send 31 1MB messages before SenderLink no longer sends messages. I can send 62 512kB messages before sending link stops working. Once I get down to 128kB message sizes it seems to work indefinitely. If I restart the client while leaving the server running it can send another N messages before seeing the issue again. Is this a bug? Am I doing something wrong?
As always, thanks for the help. Let me know if you need anymore information. This is a very important issue to resolve for us.
Here is the code for the client with the issue.
class Program
{
static void Main(string[] args)
{
Trace.TraceLevel = TraceLevel.Frame;
Trace.TraceListener = (f, a) =>
{
Console.WriteLine(DateTime.Now.ToString("[hh:ss.fff]") + " " + string.Format(f, a));
};
var connection = new Connection(new Address("amqp://guest:guest@localhost:5762"));
var session = new Session(connection);
var sender = new SenderLink(session, "link-name", "data");
int count = 0;
while (true)
{
int arrayLength = 1024 * 1024; //TimeoutException after 31 messages
//int arrayLength = 1024 * 512; //TimeoutException after 62 messages
//int arrayLength = 1024 * 256; //TimeoutException after 120 messages
//int arrayLength = 1024 * 128; //No issues
sender.Send(new Message(new byte[arrayLength]), 10000);
Console.WriteLine(++count);
}
}
}
Here is the trace for the two messages sent before the TimeoutException (30 and 31).
30
[05:53.200] SEND (ch=0) transfer(handle:0,delivery-id:30,delivery-tag:0000001E,m
essage-format:0,settled:False,more:True,batchable:True) payload 16353
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.200] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.216] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.231] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.247] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.262] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.263] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.263] SEND (ch=0) transfer(handle:0) payload 1299
[05:53.295] RECV (ch=0) disposition(role:True,first:30,settled:True,state:accept
ed())
31
[05:53.295] SEND (ch=0) transfer(handle:0,delivery-id:31,delivery-tag:0000001F,m
essage-format:0,settled:False,more:True,batchable:True) payload 16353
[05:53.295] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.310] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.326] SEND (ch=0) transfer(handle:0,more:True) payload 16364
[05:53.342] SEND (ch=0) transfer(handle:0,more:True) payload 16364
Here is the server code.
class Program
{
static void Main(string[] args)
{
Trace.TraceLevel = TraceLevel.Frame;
Trace.TraceListener = (f, a) =>
{
Console.WriteLine(DateTime.Now.ToString("[hh:ss.fff]") + " " + string.Format(f, a));
};
var uri = new Uri("amqp://guest:guest@localhost:5762");
var host = new ContainerHost(new List<Uri>() { uri }, null, uri.UserInfo);
host.RegisterMessageProcessor("data", new MsgProc());
host.Open();
Console.WriteLine("running");
Console.ReadLine();
}
}
class MsgProc : IMessageProcessor
{
public int Credit
{
get { return 300; }
}
public void Process(MessageContext messageContext)
{
Console.WriteLine("------------------------Message------------------------------");
Console.WriteLine("Body Length: {0}", messageContext.Message.GetBody<byte[]>().Length);
Console.WriteLine("----------------------Message End----------------------------");
messageContext.Complete();
}
}
Here is the server frame trace for the last two messages.
------------------------Message------------------------------
Body Length: 1048576
----------------------Message End----------------------------
[06:16.750] SEND (ch=0) disposition(role:True,first:29,settled:True,state:accept
ed())
[06:16.750] RECV (ch=0) transfer(handle:0,delivery-id:30,delivery-tag:0000001E,m
essage-format:0,settled:False,more:True,batchable:True) payload 16353
[06:16.765] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.765] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.765] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.765] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.765] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.765] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.781] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.797] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.797] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.797] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.797] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.797] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.797] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.812] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.828] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.844] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.859] RECV (ch=0) transfer(handle:0) payload 1299
------------------------Message------------------------------
Body Length: 1048576
----------------------Message End----------------------------
[06:16.859] SEND (ch=0) disposition(role:True,first:30,settled:True,state:accept
ed())
[06:16.859] RECV (ch=0) transfer(handle:0,delivery-id:31,delivery-tag:0000001F,m
essage-format:0,settled:False,more:True,batchable:True) payload 16353
[06:16.859] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.859] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.859] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.875] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.890] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364
[06:16.906] RECV (ch=0) transfer(handle:0,more:True) payload 16364