Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复masstransit.rabbitmq(5.3.2)、rabbitmq.client(5.1.0)在大量已发布消息时出现的541问题_C#_Rabbitmq_Masstransit - Fatal编程技术网

C# 如何修复masstransit.rabbitmq(5.3.2)、rabbitmq.client(5.1.0)在大量已发布消息时出现的541问题

C# 如何修复masstransit.rabbitmq(5.3.2)、rabbitmq.client(5.1.0)在大量已发布消息时出现的541问题,c#,rabbitmq,masstransit,C#,Rabbitmq,Masstransit,我将Masstransit.RabbitMQ与我的dotnet核心应用程序一起使用。我正在构建一个框架,该框架将包装Masstransit,如果需要,将能够在未来即插即用其他服务总线 我在以下LOC中遇到错误: TaskUtil.Await(BusControl.Publish<Message<TMessage>>(message, c => { c.Durable = true; })); TaskUtil.Await(BusControl.Publis

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

我在以下LOC中遇到错误:

    TaskUtil.Await(BusControl.Publish<Message<TMessage>>(message, c => { c.Durable = true; }));
TaskUtil.Await(BusControl.Publish(message,c=>{c.Durable=true;}));
它通常运行良好。但是,当我尝试发布50000多条消息时,在正确传递了80%的消息后,我得到了以下错误:

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

我正在使用单例创建连接。 不确定连接在某个点后失败的原因。 我的目标是建立一个可靠的框架,能够处理任意数量的消息

我尝试添加5秒的心跳,并将PublishConfirms设置为true。它只是最小化了抛出错误的TAT。仅供参考,预回迁设置为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);
            }
        });
返回masstTransit.Bus.Factory.CreateUsingRabbitMq(cfg=>
{
var host=cfg.host(新Uri(settings.RabbitMQURL),hst=>
{
用户名(settings.RabbitMQUserName);
密码(settings.RabbitMQPassword);
心率(5);
hst.publisherconfimation=true;
});
foreach(设置中的操作。BeforeBuildActions)
{
action.Invoke(cfg,主机);
}
});

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

似乎您的代理正在溢出并终止连接,或者您的网络不可靠并终止连接。我可以使用基准测试应用程序(MassTransit Benchmark)生成那么多消息和更多消息,没有任何问题,因此这不是MassTransit的问题。谢谢Chris。有没有办法检查经纪人是否超支?对于网络质量和可靠性,我没有太多的事情要做。但我们需要一个前进的方向。谢谢“有没有办法检查代理是否超限?”-当然,检查日志并监视代理()。在出现这些异常时发布RabbitMQ日志将非常有帮助。当然可以。非常感谢卢克