static void WithAdminClient(ILogger logger, Action <IAdminClient> callback) { using var producer = new KafkaProducerImplementation(new SerilogLoggerFactory(logger), KafkaTestConfig.Address, configurationCustomizer: ConfigurationCustomizer); using var adminClient = producer.GetAdminClient(); callback(adminClient); }
public void Dispose() { using (var producer = new KafkaProducerImplementation(new SerilogLoggerFactory(Logger), KafkaTestConfig.Address)) using (var adminClient = producer.GetAdminClient()) { var metadata = adminClient.GetMetadata(TimeSpan.FromSeconds(10)); if (!metadata.Topics.Select(t => t.Topic).Contains(_topicName)) { return; } Logger.Information("Deleting topic {topic}", _topicName); ExceptionDispatchInfo exception = null; var done = new ManualResetEvent(false); Task.Run(async() => { try { await adminClient .DeleteTopicsAsync(new[] { _topicName }, new DeleteTopicsOptions { OperationTimeout = TimeSpan.FromSeconds(10) }); } catch (Exception ex) { exception = ExceptionDispatchInfo.Capture(ex); } finally { done.Set(); } }); if (!done.WaitOne(TimeSpan.FromSeconds(20))) { throw new TimeoutException($"Timeout after waiting 20 s for topic {_topicName} to be deleted"); } if (exception != null) { Console.WriteLine($"Error when deleting topic {_topicName}: {exception.SourceException}"); } } }
public async Task ListTopics() { var producer = new KafkaProducerImplementation(new ConsoleLoggerFactory(minimumLogLevel: LogLevel.Debug), KafkaTestConfig.Address); Using(producer); var adminClient = producer.GetAdminClient(); Using(adminClient); var metadata = adminClient.GetMetadata(TimeSpan.FromSeconds(10)); Console.WriteLine($@"Topics: {string.Join(Environment.NewLine, metadata.Topics.Select(t => $" {t.Topic}: {string.Join(", ", t.Partitions.Select(p => p.PartitionId))}"))} "); //Console.WriteLine("Deleting all topics!"); //await adminClient.DeleteTopicsAsync(metadata.Topics.Select(t => t.Topic)); }
public static string GetTopic(ILogger logger) { using (var producer = new KafkaProducerImplementation(new SerilogLoggerFactory(logger), KafkaTestConfig.Address)) using (var adminClient = producer.GetAdminClient()) { var topics = adminClient .GetMetadata(TimeSpan.FromSeconds(10)) .Topics.Select(topic => topic.Topic) .Select(topic => topic.Split('-')) .Where(parts => parts.Length == 2 && int.TryParse(parts[1], out _)) .Select(parts => int.Parse(parts[1])) .ToList(); var number = topics.Any() ? topics.Max() : 0; var topicName = $"testtopic-{number + 1}"; logger.Information("Using topic named {topic}", topicName); return(topicName); } }