我在我的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条消息能够成功发布和使用。但是正在中途出错。