private static ProducerSyncSender <TKey, TValue> GetResendProducerSender <TKey, TValue>(ConsumerConnectionBuilder <TKey, TValue> cb, IServiceBusLogger logger) { // Cria o produtor com o mesmo endereço do consumidor (isso pode melhorar) var produtorBuilder = new ProducerConnectionBuilder <TKey, TValue>(cb.CaPath); var producer = produtorBuilder .WithBootstrapServers(cb.GetConsumerConfig().BootstrapServers) .WithAsyncProducer() .WithJsonSerializer() .Build(); var producerSender = new ProducerSyncSender <TKey, TValue>(producer, new NullProducerClient <TKey, TValue>(logger), logger); return(producerSender); }
public static KafkaBuilder AddProducer <TProducerClient, TKey, TValue>( this KafkaBuilder kafkaBuilder, Action <IServiceProvider, ProducerConnectionBuilder <TKey, TValue> > optionsAction ) where TProducerClient : class, IProducerClient <TKey, TValue> { var services = kafkaBuilder.Services; services.AddSingleton <IProducerClient <TKey, TValue>, TProducerClient>(); services.AddSingleton <IProducerSender <TKey, TValue> >(s => { var logger = s.GetRequiredService <IServiceBusLogger>(); var config = s.GetService <IOptions <KafkaConfig> >(); var builder = new ProducerConnectionBuilder <TKey, TValue>(config.Value.CertificatePath); var producerClient = s.GetRequiredService <IProducerClient <TKey, TValue> >(); optionsAction(s, builder); if (builder.AsyncProducer) { return(new ProducerAsyncSender <TKey, TValue>( builder.Build(), producerClient, logger )); } else { return(new ProducerSyncSender <TKey, TValue>( builder.Build(), producerClient, logger )); } }); return(kafkaBuilder); }
public async void Send( [FromBody] PublisherRequest request, [FromServices] IServiceBusLogger logger ) { // Set message properties request.Message.Id = Guid.NewGuid(); request.Message.SendDate = DateTime.Now; // Create producer var builder = new ProducerConnectionBuilder <Guid, EventMessage>(request.Settings.IgnoreSsl ? null :this._appConfiguration.Kafka.CertificatePath); var producer = builder .WithBootstrapServers(request.Settings.BootstrapServers) .WithAsyncProducer() .WithJsonSerializer() .Build(); var producerSender = new ProducerAsyncSender <Guid, EventMessage>( producer, null, logger ); await producerSender.SendAsync(request.Message.Id, request.Message, request.Settings.Topic); }