2017-03-22 17 views
0

MassTransitに次のコードでメッセージを送信しない問題があります。これはAzure Service Busコードのポートであり、問​​題なく動作します。 GitHubの例では、Queue - Starbucksの例が表示され、インフラストラクチャが機能しています。MassTransitがメッセージを送信していません - RabbitMQ

誰でもメッセージを送信しない理由をお聞かせください。私は、キューと交換の両方を作成して、試してみた。

コンソールアプリケーションは、予想される結果を表示します。

ありがとうございます。

public class Program 
    { 
     static void Main() 
     { 
      IBusControl busControl = CreateBus(); 

      TaskUtil.Await(() => busControl.StartAsync()); 

      List<Task> tList = new List<Task>(); 
      for (int i = 0; i < 10; i++) 
      { 
       var t = Send(busControl); 
       tList.Add(t); 
      } 
      Task.WaitAll(tList.ToArray()); 
      Console.WriteLine("done!"); 
     } 

     private static async Task Send(IBusControl busControl) 
     { 
      var endpoint = await busControl.GetSendEndpoint(new Uri("rabbitmq://localhost/test")); 

      Console.WriteLine("Sending"); 

      await endpoint.Send(new SomethingHappenedMessage() 
      { 
       What = "Stuff", 
       When = DateTime.Now 
      }); 

      Console.WriteLine("Sent"); 
     } 

     static IBusControl CreateBus() 
     { 
      return Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost"), h => 
      { 
       h.Username("guest"); 
       h.Password("guest"); 
      })); 
     } 
} 

public interface SomethingHappened 
    { 
     string What { get; } 
     DateTime When { get; } 
    } 

    public class SomethingHappenedMessage : SomethingHappened 
    { 
     public string What { get; set; } 
     public DateTime When { get; set; } 
    } 
+0

'test'交換は' test'キューにバインドされていますか? –

+0

すべての開いているパイプラインが実行を終了するように、最後にバスを停止します。 –

+0

Chrisさん、待ち行列にバインドされました、ありがとうございます - 私はRabbitMQを初めて使っています。これはなぜスターバックスのサンプルが箱から出ていったのかを説明していない - 私はこれがMassTransit 2.0だと思う。あなたが答えたら私はそれを正しくマークします。再度、感謝します。 – KnowHoper

答えて

2

あなたがRabbitMQのを使用してMassTransitでメッセージを送って、デフォルトでキューのバインドが作成されていません。サービス内の受信エンドポイントは、キューと関連するバインディングを作成すると想定されます。

キューとバインディングがメッセージを送信するときに、あなたは以下に示すように、いくつかの追加のクエリ文字列パラメータを含めるようにエンドポイントアドレスを変更することができる存在することを確認するには、次の受信エンドポイントの場合は

rabbitmq://localhost/vhost/exchange_name?bind=true&queue=queue_name 

を、交換名とキュー名は同じです。

関連する問題