Ich bin auf der Suche nach einem Kafka-Produzent als Singleton in meiner App zu injizieren. Derzeit sind zwei Schritte erforderlich, um die Instanz zu entfernen. Zuerst müssen Sie den Puffer leeren, zweiter Anruf entsorgen. Um die Leistung zu erhöhen, sollte dies nur passieren, wenn Nachrichten nicht mehr verarbeitet werden.asp.net Kernabhängigkeit Injektion Konfigurieren
Meine Lösung für ASP.NET-Kern ist, die AddSingleton()
Methode in DI zu verwenden und dann ApplicationLifetime.ApplicationStopping.Register
zu verwenden, um einen Rückruf zu registrieren, der den Erzeuger spült und abstellt. Ich folgte das gefunden Tutorial hier: https://andrewlock.net/four-ways-to-dispose-idisposables-in-asp-net-core/
zusammen einen schnellen Test Putting ich folgend in meiner Startup-Klasse tat
public void ConfigureServices(IServiceCollection services)
{
var producerConfig = new Dictionary<string, object>
{
{ "bootstrap.servers", "192.168.99.100:9092" },
{ "client.id", Dns.GetHostName() },
{ "api.version.request", true }
};
services.AddSingleton(new Producer<Null, string>(producerConfig, null, new StringSerializer(Encoding.UTF8)));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
{
loggerFactory.AddConsole();
app.UseMvc();
app.UseWebSockets();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
lifetime.ApplicationStopping.Register(flushAndDispose, app.ApplicationServices.GetRequiredService<Producer>());
}
aber wenn es läuft ich die folgende Fehlermeldung erhalten:
An exception of type 'System.InvalidOperationException' occurred in Microsoft.Extensions.DependencyInjection.Abstractions.dll but was not handled in user code: 'No service for type 'Confluent.Kafka.Producer' has been registered.'