2017-07-11 7 views
0

Ich habe folgende ProcessQueueMessage Funktion, die Nachrichten von Service-Bus-Warteschlange sammelt:Azure Service-Bus Warteschlange Datenempfänger

public static void ProcessQueueMessage([ServiceBusTrigger("dsique2")] BrokeredMessage message, 
     TextWriter logger) 
    { 
     logger.WriteLine($"Processing message: {message}"); 
     Stream stream = message.GetBody<Stream>(); 
     StreamReader reader = new StreamReader(stream); 
     string s = reader.ReadToEnd(); 
     //Parse json 
     string output = s.Substring(s.IndexOf('{') , s.IndexOf('}') - s.IndexOf('{') + 1); 
     var json = JsonConvert.DeserializeObject<dynamic>(output); 
     var TS = Convert.ToDouble(json.ts); 
     var Speed = Convert.ToDouble(json.speed); 
     var Ped = Convert.ToDouble(json.ped); 
     var BrakePed = Convert.ToDouble(json.brakeped); 
     var lateralAcc1 = Convert.ToDouble(json.lateralacc1); 
     var steeringAngle = Convert.ToDouble(json.steeringangle); 
     //sends parsed values to function 
     Program.receive_emulate(0x415, Speed, TS, "offlineSpeed"); 
     Program.receive_emulate(0x204, BrakePed , TS, "BrakePed "); 
     Program.receive_emulate(0x7D, lateralAcc1 , TS, "lateralAcc1 "); 
     Program.receive_emulate(0x92, steeringAngle , TS, "steeringAngle "); 
} 

Also im Grunde, wenn Daten von Service-Bus-Warteschlange als JSON-Format kommen, analysiere ich das json, erhalten Werte und schickte jedes Signal an receive_emulate-Funktion. Das Problem ist, dass die Funktion ausgelöst wird, bevor die Datenverarbeitung in der Funktion receive_emulate endet. Ich möchte eine einzelne Nachricht verarbeiten und sie an receive_emulate-Funktionen senden. Wenn die Funktion zurückkehrt, nehmen Sie die zweite Nachricht in der Warteschlange. Leider konnte ich dies nicht erreichen, jede Idee würde sehr geschätzt werden. Ein weiterer, obwohl es geschrieben ist, dass Fifo in Service-Bus-Warteschlangen in azurblauen Dokumentation garantiert ist, stelle ich fest, dass meine Nachrichten nicht in Ordnung kommen. Gibt es eine Möglichkeit, sie in geordneter Form zu bekommen? Vielen Dank

Antwort

1

Wenn ich Ihren Code richtig gelesen habe, verwenden Sie Azure-Funktionen mit Service Bus-Trigger.

Try maxConcurrentCalls Parameter 1 in hosts.json Datei einstellen, die here gezeigt.

Die maximale Anzahl der gleichzeitigen Aufrufe an den Rückruf die Nachricht Pumpe sollte initiieren. Der Standardwert ist 16.

+0

Sortiert. Vielen Dank – emkay

1

Genau wie @Mikhail wies darauf hin, ermöglicht Gleichzeitigkeit zu einer Einstellung, die Sie Ihre Nachrichten in serielle Art und Weise zu verarbeiten, entweder über host.json können Sie

ich auf Ihre zweite Frage konzentrieren werde über FIFO. Azure Service Bus tut nicht garantieren Reihenfolge der Nachrichten, es sei denn, Sie verwenden Messaging Sessions. Soweit ich weiß, sind Service Bus Sitzungen not currently supported mit Funktionen.

+0

In der Tat ist das Fehlen von Session-Unterstützung in Funktionen ein großes Problem für uns ... – Mikhail

Verwandte Themen