zoukankan      html  css  js  c++  java
  • 13,EasyNetQ-错误条件

    在本节中,我们将看看任何消息系统中可能出现的各种错误情况,并查看EasyNetQ如何处理它们。

    1,我的订阅服务死亡

    你已经写了一个订阅了我的NewCustomerMessage的windows服务。 如果服务失败会发生什么? 为了提高效率,EasyNetQ为订阅实现了一个内部内存队列。 消息从RabbitMQ通过网络接收并放置在该队列中。 单个订阅线程将消息依次从队列中取出,并将它们传递给您提供的回调。 一旦回调完成,EasyNetQ将“Ack”发送回RabbitMQ。 在收到'Ack'之前,消息不会从RabbitMQ队列中删除。 如果您的服务在处理消息时死掉,则消息(以及EasyNetQ内存队列中的所有消息)将保留在RabbitMQ队列中。 一旦你的服务重新连接,消息将被重新发送。

    2,我的订阅者消息发布速度比发布时慢

    EasyNetQ使用RabbitMQ的服务质量设置将预设计数设置为一些合理的设置(当前为50)。 这意味着用户的内存队列中永远不会有超过50条消息。 这可以防止在订阅应用程序中发生内存不足异常。 一旦未发出消息的计数达到此级别,RabbitMQ将停止发送它们,并将它们留在其内部队列中。 当然,最终这个队列会占用RabbitMQ服务器机器上的所有磁盘空间。 您应该进行一些监测以确保在发生这种情况之前收到警报。

    3,我的用户和RabbitMQ Broker之间有网络故障

    正如在“连接到RabbitMQ”一节中所描述的,EasyNetQ实现了一个延迟连接策略。它假定代理并不总是可用的。当您第一次使用RabbitHutch连接到代理时。CreateBus, EasyNetQ进入一个连接尝试循环,如果在连接字符串中指定的地址上没有可用的代理,您将看到“尝试连接”的信息消息。用户可以使用总线订阅。即使没有代理,也要订阅。订阅细节由EasyNetQ缓存。当代理成为可用的连接循环时,将建立与代理的连接,并创建所有缓存的订阅。

    同样,当EasyNetQ与代理失去连接时,它将返回到连接循环,您将在日志中看到“尝试连接”消息。 一旦连接重新建立,缓存的用户再次被创建。 这样做的结果是,您可以让您的订户在网络连接不可靠或您需要退出RabbitMQ代理的环境中运行。

    4,我的订阅回调在消费时引发异常

    如果您的订阅回调引发异常,则EasyNetQ将接收正在使用的消息并将其包含在特殊的错误消息中。 该错误消息将发布到EasyNetQ错误队列(名为EasyNetQ_Default_Error_Queue)。 您应该监视错误队列中的任何消息。 错误消息包括重新发布原始消息所需的所有信息以及异常的类型,消息和堆栈跟踪。 您可以使用EasyNetQ.Hosepipe实用程序重新发布错误消息。 请参阅下面的EasyNetQ.Hosepipe一节。

     

  • 相关阅读:
    Javascript中最常用的55个经典技巧
    Linux2.6--进程抢占和上下文切换
    redis 无法启动
    Dev GridView-Bind Detail Grid during runtime
    SharePoint场管理-PowerShell(二)
    SharePoint场管理-PowerShell(一)
    SharePoint的安装和配置-PowerShell
    SPField的GetValidatedString方法没有被调用
    PowerShell基础
    什么是工作流?
  • 原文地址:https://www.cnblogs.com/zd1994/p/8651651.html
Copyright © 2011-2022 走看看