ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 一段时间后在RabbitMQ中获取OutOfMemory

2019-06-27 11:55:01  阅读:339  来源: 互联网

标签:c out-of-memory autofac masstransit


我使用RabbitMQ与C#,MassTransit,Autofac.

我有一个预定的(5秒)工作来消耗队列.

这项工作大约2个小时,然后突然停止.当我搜索日志时,我发现了这个:

Scope —> An exception occurred during bus creation (See inner
exception for det ails.) —> MassTransit.ConfigurationException: An
exception occurred during bus creation —>
System.OutOfMemoryException: Exception of type ‘System.OutOfMemoryException’ was thrown.

这些是我在MassTransit中配置Autofac的代码块:

builder.Register(context =>
{
    var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
    {
        cfg.Host(new Uri(Globals.QueueUrl), h =>
        {
            h.Username(Globals.QueueUserName);
            h.Password(Globals.QueuePassword);
        });

        cfg.ReceiveEndpoint("create_sales_queue",
            ec =>
            {
                ec.Consumer<CreateSalesConsumer>(context);
                ec.UseRetry(p => p.Incremental(10, TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200)));
            });

    });
    return busControl;
})
    .InstancePerDependency()
    .As<IBusControl>()
    .Named<IBusControl>(GenericIntegrationTask.CreateSalesTask.ToString());

这些是预定的工作代码:

try
{

    var bus = container.ResolveNamed<IBusControl>(GenericIntegrationTask.CreateSalesTask.ToString());
    bus.Start();
    Thread.Sleep(2000);
    bus.Stop();        
}
catch (Exception e)
{
    Console.WriteLine(e);
}  

提前致谢.

解决方法:

您永远不应该为每个依赖项或每个请求注册您的IBus.它必须是单个实例.

您还需要在应用启动时启动总线,并在应用停止时停止总线.

标签:c,out-of-memory,autofac,masstransit
来源: https://codeday.me/bug/20190627/1304394.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有