Exemple #1
0
        public async Task <QueueReceiveResult <T> > TryReceiveMessage()
        {
            var qrr = new QueueReceiveResult <T>();

            try {
                var receiveMessageRequest = new ReceiveMessageRequest {
                    QueueUrl            = _queueUrl,
                    MaxNumberOfMessages = 1
                };
                var receiveMessageResponse = await _sqs.ReceiveMessageAsync(receiveMessageRequest);

                //Console.WriteLine("Receive");
                if (receiveMessageResponse.Messages.Count < 1)
                {
                    return new QueueReceiveResult <T> {
                               Ok = false
                    }
                }
                ;

                var message = receiveMessageResponse.Messages[0];
                var res     = Serializer.Deserialize <QueueMessageWithId <T> >(Encoding.UTF8.GetBytes(message.Body));
                var handle  = message.ReceiptHandle;
                return(new QueueReceiveResult <T> {
                    Ok = true,
                    Id = res.Id,
                    Value = res.Payload,
                    DeleteHandle = handle
                });
            } catch {
                return(new QueueReceiveResult <T> {
                    Ok = false
                });
            }
        }
Exemple #2
0
        private static void Queue()
        {
            var       redis = new Redis(keyNameSpace: "RedisQueueTests");
            var       queue = new RedisQueue <string>(redis, "CouldSendAndReceiveMessages", timeout: 5000);
            const int n     = 10000;

            var sw = new Stopwatch();

            sw.Start();
            var producer1 = Task.Run(async() => {
                //await Task.Delay(1000);
                for (var i = 0; i < n; i++)
                {
                    await queue.TrySendMessage(i.ToString());
                    //await queue.TrySendMessage(new String('x', i*1));

                    //await Task.Delay(50);
                }
            });

            //var producer2 = Task.Run(async () => {
            //    for (var i = n; i < 2*n; i++) {
            //        await queue.TrySendMessage(i.ToString());
            //        //await Task.Delay(50);
            //    }
            //});

            var consumer = Task.Run(async() => {
                var c = 0;
                while (true)
                {
                    //await Task.Delay(100);
                    QueueReceiveResult <string> message = default(QueueReceiveResult <string>);
                    try {
                        message = await queue.TryReceiveMessage();
                    } catch (Exception e) {
                        Console.WriteLine(e);
                    }
                    c++;
                    //if (message.OK) { Console.WriteLine(message.Value); }
                    if (message.Ok)
                    {
                        await queue.TryDeleteMessage(message.DeleteHandle);
                    }
                    if (message.Ok && c == n)
                    {
                        break;                       // n * 2
                    }
                }
            });

            producer1.Wait();
            //producer2.Wait();
            consumer.Wait();
            sw.Stop();
            Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
            queue.Dispose();
            //Thread.Sleep(2000);
        }