Exemplo n.º 1
0
        public async Task <bool> RecordAsync <T>(T @event, string streamName)
        {
            string objAsJson = _serializer.Serialize(@event);

            byte[] objAsBytes = Encoding.UTF8.GetBytes(objAsJson + "\n");

            using (var ms = new MemoryStream(objAsBytes))
            {
                var record = new Record {
                    Data = ms
                };

                var request = new PutRecordRequest
                {
                    DeliveryStreamName = streamName,
                    Record             = record
                };

                PutRecordResponse response = await _client.PutRecordAsync(request);

                if (response.HttpStatusCode != HttpStatusCode.OK)
                {
                    throw new System.Exception($"Error sending message. HttpStatusCode: {response.HttpStatusCode}");
                }
            }

            return(true);
        }
Exemplo n.º 2
0
        public async Task <bool> EnqueueBatchAsync <T>(IEnumerable <MessageEntry <T> > messages, string queue = "")
        {
            var queueEndpoint = GetQueueEndpoint(queue);

            int pageSizedLimit = 10;
            int messagesCount  = 0;
            int totalMessages  = messages.Count();

            var entries       = new List <SendMessageBatchRequestEntry>();
            var responseTasks = new List <Task <SendMessageBatchResponse> >();

            int currentMessagesCount = 0;
            int objIndex             = messagesCount;

            while (messagesCount < totalMessages)
            {
                while (objIndex < totalMessages && currentMessagesCount < pageSizedLimit)
                {
                    var message = messages.ElementAt(objIndex);

                    string objJson = _serializer.Serialize(message.Message);

                    entries.Add(new SendMessageBatchRequestEntry(message.Id, objJson));

                    currentMessagesCount++;
                    objIndex = messagesCount + currentMessagesCount;
                }

                var request = new SendMessageBatchRequest(queueEndpoint, entries);

                responseTasks.Add(_amazonSQS.SendMessageBatchAsync(request));

                messagesCount += entries.Count;
            }

            IEnumerable <SendMessageBatchResponse> responses = await Task.WhenAll(responseTasks);

            foreach (var response in responses)
            {
                if (response.HttpStatusCode != HttpStatusCode.OK)
                {
                    throw new Exception($"Error sending message. HttpStatusCode: {response.HttpStatusCode}");
                }

                if (response.Failed?.Any() == true)
                {
                    throw new Exception($"Error sending message. Code: {response.Failed[0].Code}. Error: {response.Failed[0].Message}");
                }
            }

            return(true);
        }