private void DequeueManyMessages(EnqueueMethod enqueueMethod, DequeueMethod dequeueMethod) { foreach (var message in Messages) enqueueMethod(message); var messages = new List<ProcessingMessage>(); for (var i = 0; i < Messages.Count; ++i) messages.Add(dequeueMethod()); Assert.True(messages.Count == Messages.Count); foreach (var message in Messages) Assert.True(messages.Contains(message)); }
private void OnMessageDequed(IAsyncResult ar) { BasicDeliverEventArgs message = null; try { if (_disposed != 0 || _cts.IsCancellationRequested) { return; } DequeueMethod dq = (DequeueMethod)ar.AsyncState; message = dq.EndInvoke(ar) as BasicDeliverEventArgs; if (message != null) { OnEventReceived(message.Body.Deserialize <TEvnt>()); } //_model.BasicAck(message.DeliveryTag, false); } catch (EndOfStreamException endEx) { Log.Error("End-of-stream exception has occurred while ending the async dequeue operation; the operation will not be requeued", endEx); return; } catch (Exception genEx) { Log.Error("Exception has occurred while ending the async dequeue operation; \n\r the operation will be requeued", genEx); InvokeAsyncDequeue(); return; } if (message != null && _HandleOnReceive) { if (_disposed != 0 || _cts.IsCancellationRequested) { return; } try { HandleData(message); } catch (Exception e) { Log.Error("Error occured while try to handle the message; \n\r the next dequeue operation will still occur", e); } } message = null; InvokeAsyncDequeue(); }
/*============================================================================= Private methods =============================================================================*/ private void DequeueOneMessage(EnqueueMethod enqueueMethod, DequeueMethod dequeueMethod) { enqueueMethod(Messages[0]); var message = dequeueMethod(); Assert.True(message == Messages[0]); }
private void InvokeAsyncDequeue() { DequeueMethod dq = _consumer.Queue.Dequeue; System.Threading.Tasks.Task.Factory.FromAsync(dq.BeginInvoke, OnMessageDequed, dq); }