2017-08-24 51 views
1

我想獲取與RabbitMQ的rebus來檢索已成功發佈到消息隊列的消息。我沒有做的事情需要完成。下面是示例代碼?Rebus RabbitMQ無法訂閱

static async Task MainSubscribeAsync() 
     { 

      var connection = "amqp://jhgj67546:[email protected]"; 

      using (var activator = new BuiltinHandlerActivator()) 
      { 
       activator.Register(() => new WagonHandler()); 

       var bus = Configure.With(activator) 
        .Logging(l => l.ColoredConsole()) 
        .Transport(t => t.UseRabbitMq(connection, "wagon_v1") 
         .ExchangeNames(directExchangeName: "WamosExchange")) 
        .Start(); 

       await activator.Bus.Subscribe<Wagon>(); 

       Console.WriteLine("Done"); 
      } 
     } 

的處理類看起來像這樣

class WagonHandler : IHandleMessages 
    { 
     public async Task Handle(Wagon message) 
     { 
      Console.WriteLine($"Token {message.Token}"); 
      Console.WriteLine($"WagonId {message.WagonId}"); 
     } 
    } 

回答

1

此代碼

static async Task MainSubscribeAsync() 
{ 

    var connection = "amqp://jhgj67546:[email protected]"; 

    using (var activator = new BuiltinHandlerActivator()) 
    { 
     activator.Register(() => new WagonHandler()); 

     var bus = Configure.With(activator) 
      .Logging(l => l.ColoredConsole()) 
      .Transport(t => t.UseRabbitMq(connection, "wagon_v1") 
       .ExchangeNames(directExchangeName: "WamosExchange")) 
      .Start(); 

     await activator.Bus.Subscribe<Wagon>(); 

     Console.WriteLine("Done"); 
    } 
} 

啓動總線,建立一個訂閱,然後立即因爲BuiltinHandlerActivator設置關閉。

這意味着你可能是幸運的,也許收到幾條短信,但在大多數情況下,你可能不會:)

而應該配置總線您的應用程序啓動時,然後保持作爲一個單例實例(如the wiki page about Rebus' instance policies中所述)在您的應用程序的整個生命週期中,僅在應用程序關閉時進行處置。