public async Task <DeliveryMessageReport> ProduceAsync(TMessage message)
        {
            var messageDateTime = DateTime.UtcNow;
            var deliveryReport  = new DeliveryMessageReport(this.topicName, messageDateTime);

            try
            {
                if (message == null)
                {
                    throw new ArgumentNullException(nameof(message));
                }

                var messageContent = this.messageSerializer.Serialize(message);

                var kafkaMessage = this.CreateKafkaMessage(messageDateTime, Guid.NewGuid().ToString(), message, messageContent);

                deliveryReport.UpdateMessage(kafkaMessage.Key, GetHeadersContent(kafkaMessage.Headers));

                var result = await this.producer.ProduceAsync(this.topicName, kafkaMessage);

                deliveryReport.UpdateSuccess(result.Partition, result.Offset);
            }
            catch (Exception ex)
            {
                deliveryReport.UpdateFailure(ex);
            }

            return(deliveryReport);
        }
Beispiel #2
0
        public async Task Handle_ProduceBankResponseTransactionMessageAsync_Success()
        {
            // Arrange
            var createPaymentEvent = new CreatePaymentEvent(Guid.NewGuid(), Guid.NewGuid(), new CreditCardProtected(), Money.Zero);

            var createTransactionEvent = new CreateTransactionEvent(createPaymentEvent.EventID, Guid.NewGuid(), "Approved");

            var deliveryMessageReport = new DeliveryMessageReport("Payment.gateway-events-v2", DateTime.Now);

            var mockITopicProducer = new Mock <ITopicProducer <CreateTransactionEvent> >();

            mockITopicProducer.Setup(t => t.ProduceAsync(createTransactionEvent))
            .ReturnsAsync(deliveryMessageReport);

            // Act
            var bankEventHandler = new BankEventHandler(mockITopicProducer.Object);
            await bankEventHandler.HandleAsync(createPaymentEvent);

            // Assert
            mockITopicProducer.Verify(mock => mock.ProduceAsync(It.IsAny <CreateTransactionEvent>()), new Times());
        }