如何为大量已发布的邮件修复masstransit.rabbitmq(5.3.2),rabbitmq.client(5.1.0)的541问题

时间:2019-06-03 00:17:19

标签: c# rabbitmq masstransit

我在我的dotnet核心应用程序中使用Masstransit.RabbitMQ。我正在构建一个框架,该框架将包装Masstransit,并且如果需要,将来将能够即插即用其他服务总线。

我在以下LOC中遇到错误:

    TaskUtil.Await(BusControl.Publish<Message<TMessage>>(message, c => { c.Durable = true; }));

通常工作正常。但是,当我尝试发布50000+条消息时,正确传递80%的消息后,出现以下错误:

  

已关闭:AMQP操作被中断:AMQP关闭原因,>由库启动,代码= 541,文本=“意外异常”,classId = 0,> methodId = 0,cause = System.IO.IOException:无法从>传输连接中读取数据:>远程主机强行关闭了现有连接。 ---> System.Net.Sockets.SocketException:现有连接>被远程主机强制关闭     在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,> Int32大小)     ---内部异常堆栈跟踪的结尾---     在RabbitMQ.Client.Impl.InboundFrame.ReadFrom(NetworkBinaryReader reader)     在RabbitMQ.Client.Framing.Impl.Connection.MainLoopIteration()     在RabbitMQ.Client.Framing.Impl.Connection.MainLoop()

我正在使用单例创建连接。 不确定为什么连接会失败。 我的目标是建立一个可靠的框架,该框架将能够处理任何数量的消息。

我尝试添加5秒的心跳并将PublishConfirms设置为true,这只是最小化了引发错误的TAT。仅供参考,Prefetch设置为16。我检查了许多面临类似问题但找不到解决方案的用户。

        return MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
        {
            var host = cfg.Host(new Uri(settings.RabbitMQURL), hst =>
            {
                hst.Username(settings.RabbitMQUserName);
                hst.Password(settings.RabbitMQPassword);
                hst.Heartbeat(5);
                hst.PublisherConfirmation = true;
            });


            foreach (Action<IRabbitMqBusFactoryConfigurator, IRabbitMqHost> action in settings.BeforeBuildActions)
            {
                action.Invoke(cfg, host);
            }
        });

我希望100000条消息能够成功发布和使用。但是正在中途出错。

0 个答案:

没有答案