Esempio n. 1
0
        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));
                    }
                }
            }
        }
Esempio n. 2
0
        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();
        }