【问题标题】:EasyNetQ with Windows Service Exception带有 Windows 服务异常的 EasyNetQ
【发布时间】:2014-02-27 10:44:15
【问题描述】:

我一直在使用 EasyNetQ 运行一个简单的 Windows 服务, 但是当我尝试发布消息时,我收到了一个异常。

例外:

Pubisher confirms timed out after 10 seconds waiting for ACK or NACK from sequence

这是我的发布测试:

try {       
    var queue = _bus.Advanced.QueueDeclare("api-request-history");        
    _bus.Send(queue.Name, message);

} catch (Exception e) {
    Logger.FatalException(string.Format("Message were not queued in queue: {0}", queue.Name), e);                
    OnErrorOccurred(e);     
} 

这是我的订阅测试:

public override void Subscribe(Action<IReceiveRegistration> execution) {
     var queue = _bus.Advanced.QueueDeclare("api-request-history");
     try {
         while (_bus.IsConnected) {
             _bus.Receive(queue.Name, execution);
         }
     } catch (Exception e) {
         Logger.ErrorException("Error occurred", e);
     } finally {
         if (_bus != null) {
             _bus.Dispose();
         }
     }
 }

这里是订阅的调用:

_queueConsumer.Subscribe(x => x.Add<ApiRequestHistory>(message => {
    Logger.Info("Initializing subscribtion sequence!");
    Logger.Info("Message data is being saved...");

    Execute();
    Logger.Info("Message data saving is completed!");
    Thread.Sleep(100);
    wait.Set();
}));
wait.Wait();

【问题讨论】:

    标签: c# exception windows-services rabbitmq easynetq


    【解决方案1】:

    我认为您的订阅方式错误。 You shouldn't be calling_bus.Receive(queueName) 不止一次用于同一个队列(来自 EasyNETQ 文档):

    注意:您可能不想为同一个队列多次调用 bus.Receive。这将在队列上创建一个新的消费者,RabbitMQ 将在它们之间循环。如果您在不同的 Receive 调用(以及因此不同的消费者)上使用不同的类型,那么您的一些消息将最终出现在错误队列中,因为 EasyNetQ 不会找到与使用它的消费者相关联的消息类型的处理程序。

    只需执行一次,您的消费者(每种类型)就会被注册。

    这是特别正确的,因为您似乎正在使用 publisher confirms。我不太了解您的方案,但通常不需要,除非您有事务性 RPC 调用模型。

    检查docs 发布者确认

    【讨论】:

    • 我应该如何从 Windows 服务调用它?它每 1000 毫秒重复一次,这意味着每次重新初始化时都会调用它。您能否推荐一个带有 easynetq 示例的 Windows 服务,该示例将演示它是如何工作的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多