添加单例Kafka生产者:尝试读取或写入受保护的内存

学徒

在.net core Startup.cs ConfigureServices方法中,我将kafka生产者实例注册为单例,然后将该对象作为参数传递给中间层中任何类的构造函数作为接口。在某些情况下,我会“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。” 错误。

services.AddSingleton<IProducer<Null, string>>(provider => new ProducerBuilder<Null, string>(conf).Build());

using (IProducer<Null, string> producer = new ProducerBuilder<Null, string>(conf).Build())
{
    services.AddSingleton<IProducer<Null, string>>(provider => producer);
}

这些代码有什么区别。

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // ... some codes
        services.AddSingleton<IProducer<Null, string>>( provider => new ProducerBuilder<Null, string>(conf).Build());

        using (IProducer<Null, string> producer = new ProducerBuilder<Null, string>(conf).Build())
        {
            services.AddSingleton<IProducer<Null, string>>(provider => producer);
        }
    }
}  

错误位置:

public MessageMutation(IHubContext<MessageHub, ITypedHubClient> messageContext, IProducer<Null, string> producer)
{
    // some codes...

    producer.Produce("my-topic", new Message<Null, string> { Value = message.Value }, handler);

    // some codes..
}

由于您要处置生产者,可能会出现错误。单例对象应具有应用程序的生存期(基本上是单例的定义)。

using(IProducer<Null, string> producer = new ProducerBuilder<Null, string>(conf).Build()) 是(速记糖)的简写

IProducer<Null, string> producer = null;
try
{
    producer = new ProducerBuilder<Null, string>(conf).Build();

    // do sth
}
finally
{
    producer?.Dispose();
}

但是,当您放置一个对象时,您会释放它的资源,因此以后无法实际使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试读取或写入受保护的内存

P调用“尝试读取或写入受保护的内存”

SQL-尝试读取或写入受保护的内存

尝试读取或写入受保护的内存。这通常表明其他内存已损坏

尝试读取或写入受保护的内存:C ++的内存修改值

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

OpenTK:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

并行读取AutoCad数据库时出现“尝试读取或写入受保护的内存”错误

的OpenGL / OpenTK绘图与指数:尝试读取或写入受保护的内存问题

尝试读取或写入受保护的内存的平台调用错误

使用线程池限制最大线程数-尝试读取或写入受保护的内存错误

通过DllImport在C#中调用C方法-尝试读取或写入受保护的内存

尝试读取或写入受保护的内存.....在Silverlight Windows Phone 8.1项目中

urlmon.dll引起的“尝试读取或写入受保护的内存”

打开SQL Server连接的原因:System.AccessViolationException尝试读取或写入受保护的内存

VB.NET访问-尝试读取或写入受保护的内存

未处理的异常:System.AccessViolationException:尝试读取或写入受保护的内存

使用反射调用dll函数时尝试读取或写入受保护的内存

c# emgu/opencv 用法抛出异常 - 尝试读取或写入受保护的内存

附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

PInvoke ReadFile kernel32:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

启动MvvmCross Uwp应用程序时发生异常:“ System.AccessViolationException:尝试读取或写入受保护的内存”

尝试读取或写入受保护的内存。这通常表明其他内存已损坏,同时使用 C# 读取 CSV 文件

尝试使用GetClassName读取或写入受保护的内存

c dll 在 vb6 上工作正常,但在 vb.net 上出错(尝试读取或写入受保护的内存)

如何使用成长中的文件作为Apache Kafka生产者并仅读取新添加的数据

无法通过 Kafka 生产者读取文件

写入/读取受内存保护的进程的内存

单生产者,单消费者的环形缓冲区的最低限制内存排序?