Ejemplo n.º 1
0
        // DUVIDA: O nome do método é Async dentro de uma classe Sync, talvez juntar esse método no ProducerAsyncSender e renome-lo para
        // ProducerSender com os dois métodos?
        public async Task SendAsync(TKey key, TValue value, string topicName, Headers headers = null, CancellationToken cancellationToken = default)
        {
            var message = new Message <TKey, TValue>
            {
                Key     = key,
                Value   = value,
                Headers = headers
            };

            var produceTask = producer.ProduceAsync(topicName, message);

            producerClient.MessageSent(message);
            producerClient.MessageDelivered(await produceTask);

            // DUVIDA: Faz sentido ter o flush no método asyncrono tb? talvez deixar isso no ProducerSettings.
            producer.Flush(cancellationToken);
            this.logger.Log($"[To queue]: Message delivered: {topicName}, {message.Key}");
        }
Ejemplo n.º 2
0
        public Task SendAsync(TKey key, TValue value, string topicName, Headers headers = null, CancellationToken cancellationToken = default)
        {
            var message = new Message <TKey, TValue>
            {
                Key     = key,
                Value   = value,
                Headers = headers
            };

            // DUVIDA: poderia usar um task tipado com async no método para simplificar a leitura do código?
            var task = producer.ProduceAsync(topicName, message)
                       .ContinueWith(async m => producerClient?.MessageDelivered(await m), cancellationToken);

            // DUVIDA: Na prática, não fica redundante com o MessageDelivered?
            producerClient?.MessageSent(message);

            this.logger.Log($"[To queue]: Message delivered: {topicName}, {message.Key}");
            return(task);
        }