private void Process() { while (!Queue.IsEmpty) { LogDebug("Attempting to process queued messages..."); bool success = false; if (!IsClosed) { CFXEnvelope[] messages = Queue.PeekMany(AmqpCFXEndpoint.MaxMessagesPerTransmit.Value); if (messages != null && messages.Any()) { try { Message msg = AmqpUtilities.MessageFromEnvelopes(messages, AmqpCFXEndpoint.UseCompression.Value); SenderLink.Send(msg); success = true; } catch (Exception ex) { LogError(ex); AppLog.Error(ex); } if (success) { Queue.Dequeue(messages.Length); } int remainingCount = Queue.Count; if (success) { LogDebug(string.Format("{0} messages transmitted. {1} messages remaining in spool.", messages.Length, Queue.Count)); } else { LogDebug(string.Format("Messages NOT transmitted. {0} messages remaining in spool.", Queue.Count)); } if (remainingCount > 90) { LogWarn(string.Format("Warning. Spool has {0} buffered messages.", remainingCount)); } } } else { Thread.Sleep(Convert.ToInt32(AmqpCFXEndpoint.ReconnectInterval.Value.TotalMilliseconds)); int remainingCount = Queue.Count; if (remainingCount > 0) { LogWarn(string.Format("Connection Bad or Error. {0} messages remaining in spool.", Queue.Count)); } } } }
private async void Process() { while (!Queue.IsEmpty) { LogDebug("Attempting to process queued messages..."); bool success = false; if (!IsClosed) { CFXEnvelope[] messages = Queue.PeekMany(AmqpCFXEndpoint.MaxMessagesPerTransmit.Value); if (messages != null && messages.Any()) { try { Message msg = AmqpUtilities.MessageFromEnvelopes(messages, AmqpCFXEndpoint.Codec.Value, Connection.Endpoint.SubjectFormat); SenderLink.Send(msg); success = true; } catch (Exception ex) { LogError(ex); AppLog.Error(ex); } if (success) { Queue.Dequeue(messages.Length); } int remainingCount = Queue.Count; if (success) { LogDebug($"{messages.Length} messages transmitted. {Queue.Count} messages remaining in spool."); } else { LogDebug($"Messages NOT transmitted. {Queue.Count} messages remaining in spool."); } if (remainingCount > 90) { LogWarn(string.Format("Warning. Spool has {0} buffered messages.", remainingCount)); } } } else { int remainingCount = Queue.Count; if (remainingCount > 0) { LogWarn($"Connection Bad or Error. {Queue.Count} messages remaining in spool."); } await Task.Delay(Convert.ToInt32(AmqpCFXEndpoint.ReconnectInterval.Value.TotalMilliseconds)); } } lock (this) { isProcessing = false; } await Task.Yield(); }