我希望在我的应用中注入一个kafka制作人作为单身人士。处理实例时,它目前需要两个步骤。首先,你必须刷新缓冲区,第二次调用dispose。为了提高性能,只有在不再处理消息时才会发生这种情况。
我的ASP.NET核心解决方案是在DI中使用AddSingleton()
方法,然后使用ApplicationLifetime.ApplicationStopping.Register
注册一个将刷新并处理生产者的回调。我按照这里的教程:https://andrewlock.net/four-ways-to-dispose-idisposables-in-asp-net-core/
进行快速测试我在Startup类中做了以下操作:
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>());
}
但是当它运行时我收到以下错误:
发生了'System.InvalidOperationException'类型的异常 Microsoft.Extensions.DependencyInjection.Abstractions.dll但不是 用户代码处理:'没有类型的服务'Confluent.Kafka.Producer' 已经注册。'
答案 0 :(得分:2)
假设email = request.user.email
title = request.POST.get('title', '')
file = request.FILES['file']
filename = file.name
instance = Usermie.objects.get(email=request.user.email)
# Save to model
user_directory_path(instance=instance, filename=filename)
Project.objects.create(
title=title, file=file,
)
来自Producer<T1,T2>
您没有在服务集合中明确注册Producer
,因此提供商不知道如何解决它。
Producer