0

Also versuche ich gerade, einen Azure Bus Service zu arbeiten, in dem ich eine Warteschlange erstellen und dann eine Nachricht in die Warteschlange gestellt wird und dann woanders empfangen wird, und Code wird unter Verwendung der Daten ausgeführt, die die Nachricht durchlief. Ich habe alles eingerichtet und funktioniert, wie in ich kann eine Nachricht senden und erhielt es jedoch mit einigen Problemen. Während der Recherche habe ich herausgefunden, was zwei verschiedene Methoden zur Erfüllung der gleichen Aufgabe scheint.Was ist der Unterschied zwischen der ServiceBus/ServiceBusTrigger-Methode und der Verwendung von QueueClient bei Verwendung von Azure Bus Service?

Erstens:

eine Nachricht erstellen:

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

Sie erhalten eine Nachricht:

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

    } 

Hinweis: ich diese Methode zu verwenden, ich versuche, und während eine Nachricht empfangen wird, Daten sind null, wenn sie empfangen werden. Jede Hilfe mit diesem würde sehr geschätzt werden.

Zweitens:

eine Nachricht erstellen:

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

     client.Send(message); 

eine Nachricht erhalten:

 var queueName = "QueueName"; 

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

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

So ein paar Fragen.

1.Was ist der Unterschied zwischen diesen beiden Methoden und wo sollte jeder angewendet werden?

2.Während ich die erste Methode verwende, um zu versuchen und einfach eine Zeichenfolge zu senden, kann mir jemand sagen, warum 'Daten' als Null durchkommen, obwohl die Nachricht empfangen wird.

+0

Beim Empfang einer Nachricht vom Servicebus (und Senden) gibt es einen Grund, warum Sie die Klasse "BrokeredMessage" nicht verwenden? –

Antwort

3

1.Was ist der Unterschied zwischen diesen beiden Methoden und wo sollte jeder angewendet werden?

Die erste Methode verwendet Azure Webjob SDK zum Erstellen einer Nachricht und zum Empfangen der Nachricht. Die zweite Methode verwendet die Azure .Net-Bibliothek. Wir können Webjob verwenden, um Scheduler-Hintergrundaufgaben sehr einfach zu erstellen. Das WebJobs SDK verfügt über ein Bindungs- und Triggersystem, das mit Microsoft Azure Storage Blobs, Warteschlangen und Tabellen sowie Service Bus Queues arbeitet. Wenn Sie sich für die .Net-Bibliothek entscheiden und sie für einen Trigger-Job verwenden möchten, müssen Sie unseren Logikcode schreiben.

Daten ist null, wenn

erhalten Meinen Sie damit, dass die Methode Process ausgelöst wird, aber der Wert der Daten ist null? Von meinem Test zeigt es den Wert korrekt an. Ich verwende einen QueueTrigger, um eine Nachricht an den Servicebus zu senden, und empfange dann diese Nachricht in ServiceBusTrigger. Das Folgende ist mein getesteter Code.

enter image description here

Bitte überprüfen Sie Ihren Code sorgfältig. Wenn möglich, löschen Sie bitte Ihre sensible Verbindungszeichenfolge, laden Sie sie auf onedrive hoch und teilen Sie den Link hier. Es ist besser für uns, Ihr Problem zu reproduzieren.

+0

Die erste Erklärung war großartig, danke. Für das zweite Bit meine ich. Die Methode wird definitiv ausgelöst (also nimmt es die Nachricht auf), jedoch sind die Daten darin, also in meinem Fall meine String-Daten, null. Auch wenn ich die Nachricht gesendet habe, war die String-Ausgabe "test". Damit Sie ähnlich sind, müssen Sie die Funktion ProcessQueueMessage so ändern, dass sie keine weitere Nachricht verarbeitet, sondern einfach eine Zeichenfolge entgegennimmt und auf dem Servicebus ablegt. – gn12345

+0

@ gn12345 Welche Implementierung verwenden Sie von Ihrer Frage? 1 oder 2? Haben Sie auch versucht, den Wert der Nachricht auf diese Weise zu erhalten: 'String.Format (" Nachrichtentext: {0} ", message.GetBody ())' (wie im Beispiel aus [Getting Started] (https : //azure.microsoft.com/en-us/documentation/articles/servicebus-dotnet-get-started-with-queues/) Seite? –

+0

@MarkC Ich versuche die erste Methode zu verwenden, und auch ich Ich komme nicht durch eine BrokeredMessage. Nur eine Zeichenfolge. – gn12345