2016-07-28 10 views
0

MassTransitを習得しようとしています。私はMassTransit.RabbitMQバージョン3.3.5をNuGet経由でインストールしました。私はすでにErlang 18.0 *とRabbitMQ 3.6.3をインストールしています(Erlangバージョン19.0はRabbitMQ 3.6.3では不安定です)。私は "クイックスタート" MassTransitプログラムhereを見つけて、小さなタイプを修正した後、コンパイルしました。しかし、私がプログラムを実行すると、公開されたメッセージ "YourMessage"はハンドラによって処理されません! RabbitMQ管理プラグインのUIには、メッセージが1つ入った「test_queue」キューがあることが示されています。そしてそこには未加工のままです。ここで何が起こっているのですか?私はWindows 7で動作しており、RabbitMQサービスは動作しています。MassTransitクイックスタートアプリケーションが動作しません

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 => 
     Console.Out.WriteLineAsync($"Received: {context.Message.Text}")); 
    }); 
} 

を参照してください...次へ...

sbc.ReceiveEndpoint(host, "test_queue", ep => 
{ 
    ep.Handler<YourMessage>(context => 
    { 
     return 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(); 
関連する問題