Пример #1
0
        /// <summary>
        /// Waits on the specified queue for messages
        /// </summary>
        /// <param name="queue"></param>
        /// <param name="token"></param>
        /// <param name="onMessageReceived"></param>
        private void GetMessages(InMemoryQueue queue, CancellationToken token, ManualResetEvent resetEvent, Action <RawMessage, Action, Action> onMessageReceived)
        {
            while (true)
            {
                if (token.IsCancellationRequested)
                {
                    token.ThrowIfCancellationRequested();
                }

                resetEvent.WaitOne(TimeSpan.FromSeconds(15));

                RawMessage message = null;
                while (queue.Dequeue(ref message))
                {
                    onMessageReceived(
                        message,
                        () => { /* Ack No Op for InMemory */ },
                        () =>
                    {
                        // Reject puts message back in queue
                        queue.Nack(message);
                    });
                }

                resetEvent.Reset();
            }
        }
Пример #2
0
        public virtual void CanRunWorkItemWithMetrics()
        {
            var eventRaised = new ManualResetEvent(false);

            var metricsClient = new InMemoryMetricsClient();
            var behavior = new MetricsQueueBehavior<WorkItemData>(metricsClient, "metric");
            var queue = new InMemoryQueue<WorkItemData>(behaviours: new[] { behavior });
            queue.Completed += (sender, e) => { eventRaised.Set(); };

            var work = new SimpleWorkItem { Id = 1, Data = "Testing" };

            queue.Enqueue(work);
            var item = queue.Dequeue();
            item.Complete();

            metricsClient.DisplayStats(_writer);

            Assert.True(eventRaised.WaitOne(TimeSpan.FromMinutes(1)));

            Assert.Equal(6, metricsClient.Counters.Count);
            Assert.Equal(4, metricsClient.Timings.Count);

            Assert.Equal(1, metricsClient.Counters["metric.workitemdata.simple.enqueued"]?.CurrentValue);
            Assert.Equal(1, metricsClient.Counters["metric.workitemdata.simple.dequeued"]?.CurrentValue);
            Assert.Equal(1, metricsClient.Counters["metric.workitemdata.simple.completed"]?.CurrentValue);

            Assert.True(0 < metricsClient.Timings["metric.workitemdata.simple.queuetime"]?.Count);
            Assert.True(0 < metricsClient.Timings["metric.workitemdata.simple.processtime"]?.Count);
        }
        /// <summary>
        /// Waits on the specified queue for messages
        /// </summary>
        /// <param name="queue"></param>
        /// <param name="token"></param>
        /// <param name="onMessageReceived"></param>
        private void GetMessages(InMemoryQueue queue, CancellationToken token, ManualResetEvent resetEvent, Action<RawMessage, Action, Action> onMessageReceived)
        {
            while (true)
            {
                if (token.IsCancellationRequested)
                {
                    token.ThrowIfCancellationRequested();
                }

                resetEvent.WaitOne(TimeSpan.FromSeconds(15));

                RawMessage message = null;
                while (queue.Dequeue(ref message))
                {
                    onMessageReceived(
                        message,
                     () => { /* Ack No Op for InMemory */ },
                     () =>
                     {
                         // Reject puts message back in queue
                         queue.Nack(message);
                     });
                }

                resetEvent.Reset();
            }
        }