2016-07-28 91 views
0

我在學習MassTransit。我已經通過NuGet安裝了MassTransit.RabbitMQ 3.3.5版。我已經安裝了Erlang 18.0 *和RabbitMQ 3.6.3(* Erlang版本19.0對RabbitMQ 3.6.3不穩定)。我發現了一個「快速入門」的MassTransit程序here,並修正了一點點typeo後,讓它編譯。但是,當我執行該程序時,發佈的消息「YourMessage」不由處理程序處理! RabbitMQ管理插件UI顯示有一個「test_queue」隊列,其中有1條消息。它仍然存在,未經處理。這裏發生了什麼?我在Windows 7上運行,RabbitMQ服務正在運行。MassTransit快速入門App不起作用

using MassTransit; 
using System; 

namespace MassTransitPOC.Trivial 
{ 
    public class YourMessage 
    { 
     public string Text { get; set; } 
    } 

    public class Program 
    { 
     public static void Main() 
     { 
      var bus = Bus.Factory.CreateUsingRabbitMq(sbc => 
      { 
       var host = sbc.Host(new Uri("rabbitmq://localhost"), h => 
       { 
        h.Username("guest"); 
        h.Password("guest"); 
       }); 

       sbc.ReceiveEndpoint(host, "test_queue", ep => 
       { 
        ep.Handler<YourMessage>(context => 
        { 
         return Console.Out.WriteLineAsync($"Received: {context.Message.Text}"); 
        }); 
       }); 
      }); 

      bus.Start(); 

      bus.Publish(new YourMessage { Text = "Hi" }); 

      bus.Stop(); 
     } 
    } 
} 

回答

0

我跑你的代碼,並得到它通過更換從接收終端代碼的工作:

sbc.ReceiveEndpoint(host, "test_queue", ep => 
{ 
    ep.Handler<YourMessage>(context => 
    { 
     return Console.Out.WriteLineAsync($"Received: {context.Message.Text}"); 
    }); 
}); 

...以下...

sbc.ReceiveEndpoint(host, "test_queue", ep => 
{ 
    ep.Handler<YourMessage>(context => 
     Console.Out.WriteLineAsync($"Received: {context.Message.Text}")); 
    }); 
} 

看看是否能工程爲你?

(RabbitMQ的:3.6.2 /二郎:OTP 18)

+0

感謝您的回覆,但您的代碼除了組成處理程序的llambda表達式的樣式外沒有任何更改;它仍然不起作用。 – Andy

0

看來,bus.Stop()調用正在取得太快我的機器上。如果我在.Publish和.Stop之間添加以下內容,則會收到消息。如果沒有這段代碼,發佈的消息就不會被消耗。

Console.WriteLine("Press any key to exit"); 
Console.ReadKey();