public void ShouldSerializeKafkaApplicationException() { var expected = new KafkaApplicationException("3") { ErrorCode = 1 }; var actual = SerializeDeserialize(expected); Assert.AreEqual(expected.ErrorCode, actual.ErrorCode); }
public async Task QueueMessageBatchAsync <T>(Guid streamGuid, string streamNamespace, IEnumerable <T> events, StreamSequenceToken token, Dictionary <string, object> requestContext) { var queueId = _streamQueueMapper.GetQueueForStream(streamGuid, streamNamespace); var partitionId = (int)queueId.GetNumericId(); _logger.Info("KafkaQueueAdapter - For StreamId: {0}, StreamNamespace:{1} using partition {2}", streamGuid, streamNamespace, partitionId); var enumeratedEvents = events.ToList(); var payload = _batchFactory.ToKafkaMessage(streamGuid, streamNamespace, enumeratedEvents.AsEnumerable(), requestContext); if (payload == null) { _logger.Info("The batch factory returned a faulty message, the message was not sent"); return; } var messageToSend = new List <Message> { payload }; IEnumerable <ProduceResponse> response; using (TimerTimeToProduceMessage.NewContext()) { response = await _producer.SendMessageAsync(_options.TopicName, messageToSend, (short)_options.AckLevel, partition : partitionId); } // This is ackLevel != 0 check if (response != null && !response.Contains(null)) { var responsesWithError = response.Where(messageResponse => messageResponse.Error != (int)ErrorResponseCode.NoError).ToList(); if (responsesWithError.Any()) { List <Exception> allResponsesExceptions = new List <Exception>(); // Checking all the responses foreach (var messageResponse in responsesWithError) { _logger.Warn((int)KafkaErrorCodes.KafkaStreamProviderBase, "KafkaQueueAdapter - Error sending message through kafka client, the error code is {0}, message offset is {1}", messageResponse.Error, messageResponse.Offset); var newException = new KafkaApplicationException( "Failed at producing the message with offset {0} for queue {1} in topic {2}", messageResponse.Offset, queueId, _options.TopicName) { ErrorCode = messageResponse.Error, Source = "KafkaStreamProvider" }; allResponsesExceptions.Add(newException); } // Aggregating the exceptions, and putting them inside a KafkaStreamProviderException AggregateException exceptions = new AggregateException(allResponsesExceptions); KafkaStreamProviderException exceptionToThrow = new KafkaStreamProviderException("Producing message failed for one or more requests", exceptions); throw exceptionToThrow; } } HistogramProducedMessageBatchSize.Update(enumeratedEvents.Count(), queueId.ToString()); MeterProducedMessagesPerSecond.Mark(queueId.ToString(), 1); }