【问题标题】:NetMQ Unhandled Exception Best PracticesNetMQ 未处理异常最佳实践
【发布时间】:2021-06-14 00:37:36
【问题描述】:

我将 NetMQ 用于客户端/服务器通信,用于定价系统,将 Pub/Sub 用于价格数据,将 Req/Res 用于 C&C。它运行良好,只是我看到 NetMQ 库内部出现随机且不可重现的异常。

我目前在 Windows Server 2008R2/20012R2 上的 .Net v4.7.2 堆栈上使用 NetMQ v4.0.1.6。

例外情况包括:

  • NetMQ.FaultException @ NetMQ.Msg.Close()
  • System.ArgumentOutOfRangeException @ NetMQ.Core.Patterns.Utils.ArrayExtensions.Swap[]
  • System.IndexOutOfRangeException @ NetMQ.Core.Utils.YQueue`1[]/NetMQ.Core.Patterns.Utils.Trie.Check()
  • System.Net.Sockets.SocketException @ NetMQ.Core.Mailbox.TryRecv()/NetMQ.Core.Mailbox.Send()
  • System.NullReferenceException @ NetMQ.Core.Patterns.Utils.Trie.ApplyHelper()/NetMQ.Core.Patterns.Utils.Trie.Check()
  • System.ObjectDisposedException @ NetMQ.Core.SocketBase.CheckDisposed()

并且都发生在 NetMQ.NetMQPoller.RunPoller() 或 NetMQ.Core.Utils.Proactor.Loop() 中,我不知道如何捕捉和缓解它们。

使用 NetMQ 强化服务/应用程序以防止此类异常导致服务中断的正确方法是什么?

【问题讨论】:

  • 我可以在列表中再添加一个异常:未处理的异常:System.ArgumentNullException:值不能为空。参数名称:RemoteEP at System.Net.Sockets.Socket.SendTo(ByteD buffer, Int32 offset, 1nt32 size, SocketFlags socketFlags, EndPoint remoteEP) at NetN1Q.NetNIQBeacon.Shim.SendUdpFrame(NetMO.Frame frame) at NettVIQ.NetMQSocket.InvokeEvents (对象发送者,PollEvents 事件)在 NetMQ.NetMQPoller.RunPoller() 在 NetMQ.NetMQPoller.Run(SynchronizationContext syncContext)
  • 您的 MQ 队列是否只能从内部网络访问?队列中有任何 ACL 吗?

标签: c# .net zeromq netmq


【解决方案1】:

我在一个大型组织中以专业的方式完成了这项工作,并取得了巨大的成功。

最佳做法是在循环中包含一个 try catch 处理程序,然后执行如下操作

(从您的列表中随机抽取的错误类型示例)

/*loop*/(/*loop condition*/) {
  try {
    // processing
  } 
  catch (NetMQ.FaultException $exception) {
    // specific error handling
  } 
  catch (System.ObjectDisposedException $exception) {
    // specific error handling
  }
  catch (Exception $exception) {
    // generic error handling
  }
}

此外,您可以随意将特定的错误处理类/服务传递给它,以将您的错误处理功能卸载到单独的位置(更高的可测试性)。

【讨论】:

  • 我相信它不会有太大帮助,因为这些似乎是库代码从另一个线程抛出的未捕获的异常。即使捕捉到这些也不会阻止程序终止。
猜你喜欢
  • 2018-01-03
  • 1970-01-01
  • 2017-05-11
  • 2013-05-09
  • 2011-11-10
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多