C# 带有Windows服务异常的EasyNetQ

C# 带有Windows服务异常的EasyNetQ,c#,exception,windows-services,rabbitmq,easynetq,C#,Exception,Windows Services,Rabbitmq,Easynetq,我一直在运行一个简单的Windows服务,带有EasyNetQ, 但是当我试图发布一条消息时,我收到了一个异常 例外情况: Pubisher确认等待序列中的ACK或NACK 10秒后超时 以下是我的发布测试: 以下是我的订阅测试: 下面是对Subscribe的调用: 我认为你订阅的方式不对_来自EasyNETQ文档的同一队列的bus.ReceivequeueName多次出现: 注意:您可能不想呼叫总线。同一队列接收多次。这将在队列上创建一个新的使用者,RabbitMQ将在它们之间进行循环。如果您

我一直在运行一个简单的Windows服务,带有EasyNetQ, 但是当我试图发布一条消息时,我收到了一个异常

例外情况:

Pubisher确认等待序列中的ACK或NACK 10秒后超时

以下是我的发布测试:

以下是我的订阅测试:

下面是对Subscribe的调用:


我认为你订阅的方式不对_来自EasyNETQ文档的同一队列的bus.ReceivequeueName多次出现:

注意:您可能不想呼叫总线。同一队列接收多次。这将在队列上创建一个新的使用者,RabbitMQ将在它们之间进行循环。如果您在不同的接收呼叫上使用不同类型的消息,从而使用不同的使用者,则您的某些消息将最终出现在错误队列中,因为EasyNetQ将找不到与您的消息类型相关联的处理程序,而您的消息类型与使用它的使用者相关

只要这样做一次,您的每种类型的消费者都将被注册

这是特别真实的,因为您似乎正在使用publisher confirms。我不完全了解您的场景,但通常不需要,除非您有事务性RPC调用模型


检查发布者确认。

我应该如何从windows服务中调用它??它每1000毫秒重复一次,这意味着每次重新初始化时都会调用它。你能推荐一个带有easynetq示例的windows服务吗?这个示例将演示它是如何工作的?
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();