0

私は現在、Azure Bus Serviceを稼働させてQueueを作成してから、メッセージをキューに入れてから他の場所で受信し、メッセージが通過したデータを使用してコードを実行しています。私は何か問題があっても、メッセージを送ってそれを受け取ることができるので、私はすべての設定と作業をしています。 調査中、私は同じタスクを完了するために2つの異なる方法論があるように見えました。まずAzure Bus Serviceを使用する場合、ServiceBus/ServiceBusTriggerの方法論とQueueClientを使用する方法との違いは何ですか?

public static void ProcessMessage([ServiceBusTrigger("QueueName")] string data) 
    { 
     //Do something with data 

    } 

注:私はこの方法を使用しようと、メッセージが受信されている間午前、

 public static void CreateMessage(string data, [ServiceBus("QueueName")] out string output) 
    { 
     output = data; 
    } 

は、メッセージが表示されます。

は、メッセージを作成します。受信時にデータはNULLです。これについてのどんな助けも大いに感謝されるでしょう。

第二:だから、質問のカップルを

 var queueName = "QueueName"; 

    var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 

    client.OnMessage(message => 
    { 
    //do something with data 
    }); 

var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 
     var message = new BrokeredMessage("This is a test message!"); 

     client.Send(message); 

は、メッセージが表示されます。

メッセージを作成します。

1.これらの2つの方法論の違いは何ですか?それぞれはどこで適用する必要がありますか?

2.Whilst最初の方法を使用して文字列を送信しようとしていますが、メッセージが受信されたにもかかわらず、 'データ'がnullとして送信される理由を教えてください。

+0

サービスバスからメッセージを受信(および送信)するときに、あなたが 'BrokeredMessage'クラスを使用していない理由がありますか? –

答えて

3

1.これらの2つの方法論の違いは何ですか?それぞれはどこで適用する必要がありますか?

最初の方法では、Azure Webjob SDKを使用してメッセージを作成し、メッセージを受信します。 2番目の方法は、Azure .Netライブラリを使用しています。我々は非常に簡単にスケジューラのバックグラウンドタスクを作成するwebjobを使用することができます。 WebJobs SDKには、Microsoft Azureストレージ・ブロブ、キュー、および表とサービス・バス・キューで動作するバインディングおよびトリガー・システムがあります。 .Netライブラリを選択して、それを使用してトリガージョブを実行する場合は、ロジックコードを記述する必要があります。

あなたは、メソッドProcessMessageがトリガされることを意味するか

を受けたときに、データがnullであるが、しかし、データの値はnullですか?私のテストから、それは正しく値を示しています。 QueueTriggerを使用してサービスバスにメッセージを送信し、ServiceBusTriggerでこのメッセージを受け取ります。以下は私がテストしたコードです。

enter image description here

あなたのコードを慎重に確認してください。可能であれば、機密性の高い接続文字列を削除し、onedriveにアップロードして、ここでリンクを共有してください。あなたの問題を再現する方が良いでしょう。

+0

最初の説明はよかったです。 2番目のビットのために私は意味する。メソッドは間違いなくトリガーされているので(メッセージをピックアップしています)、私の場合は文字列データ内のデータはnullです。メッセージを送ったときでも、文字列の出力は「テスト」でした。 同様に、ProcessQueueMessage関数を変更して、別のメッセージを処理しないようにする必要がありますが、文字列を受け取り、サービスバスに配置するだけです。 – gn12345

+0

@ gn12345あなたはあなたの質問からどの実装を使用していますか? 1または2?また、メッセージの値を次のように取得しようとしましたか? 'String.Format(" Message body:{0} "、message.GetBody ())'([Getting Started] ://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-get-started-with-queues/)? –

+0

@ MarkC。私は最初の方法論を使用しようとしています。 BrokeredMessageを通過していません。ただの文字列です。 – gn12345

関連する問題