NewLife.XException: 匹配队列已满[256] 请问是什么原因造成,我需要怎么避免这种情况出现
我在发送消息的时候,在某个时间段会大量出现一下错误
00:00:37.192 66 Y T System.AggregateException: One or more errors occurred. (匹配队列已满[256])
---> NewLife.XException: 匹配队列已满[256]
at NewLife.Net.Handlers.DefaultMatchQueue.Add(Object owner, Object request, Int32 msTimeout, TaskCompletionSource1 source) at NewLife.Net.Handlers.MessageCodec1.AddToQueue(IHandlerContext context, T msg)
at NewLife.Net.Handlers.MessageCodec1.Write(IHandlerContext context, Object message) at NewLife.Model.Pipeline.Write(IHandlerContext context, Object message) at NewLife.Net.SessionBase.SendMessageAsync(Object message, CancellationToken cancellationToken) at NewLife.RocketMQ.ClusterClient.SendAsync(Command cmd, Boolean waitResult, CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification)
at NewLife.RocketMQ.ClusterClient.Invoke(RequestCode request, Object body, Object extFields, Boolean ignoreError)
at NewLife.RocketMQ.BrokerClient.Ping()
at NewLife.Threading.TimerScheduler.Execute(Object state)
NewLife.RocketMQ客户端实现基于NewLife网络库。 作为RPC通信客户端,网络库核心有一个匹配队列。每次发送请求时,会把请求对象放入队列,指令序列号提取出来,然后await阻塞。收到响应时,从匹配队列中找到对应序列号的请求,并让该请求所在的发起Task继续执行。 匹配队列已满,是以为这个匹配队列为了高性能设计,最大允许256个请求在等待。
RPC一般作为高速通信,每次请求响应时间很短。并且,RocketMQ协议也不会同时发起大量请求。
可以从这个方向去查找问题。