2016-04-07 7 views
3

Ich versuche, einen mehrstufigen Prozess von einem QueueTrigger pro Schritt behandelt zu erstellen. Wie kann ich die Statuseigenschaft eines QueueMessage-Objekts filtern, ohne eine Warteschlange pro Status zu haben? Msg ist vom Typ:Auslöser Filter auf POCO Eigenschaft

public partial class TaskType{ 
    string BlobPathToProcess {get; set;} 
    int State {get; set;} 
} 


public static void Task(
    [QueueTrigger(queueName: "taskq")] TaskType msg 
    TextWriter log, 
    IBinder binder) 
{ 
    //currently I use a switch statement on (TaskType.State == 1) 

So nicht:

[QueueTrigger(queueName: "taskqstate1")] TaskType msg 

[QueueTrigger(queueName: "taskqstate2")] TaskType msg 

usw.

Vielleicht wie @pranav-rastogi sagt über die Singleton attribute auf MSDN Ch9 cloud cover at min 24

[Singleton(@"{Region}\{Zone}"] 
public static void Task([QueueTrigger(singleto-test")] WorkItem workItem, ... 

Wo {Region} und {Zone} sind Eigenschaften aus dem 'workItem' Objekt.

Ähnliche:

[PocoFilter(PocoProperty="{State}", PocoValue="1"] 
public static void Task1([QueueTrigger(queueName: "taskq")] TaskType msg ... 

[PocoFilter(PocoProperty="{State}", PocoValue="2"] 
public static void Task2([QueueTrigger(queueName: "taskq")] TaskType msg ... 
+0

zum Erstellen von Workflow, können Sie Service-Bus-Thema verwenden und Abonnement mit sqlfilter erstellen.Ich werde morgen eine Antwort posten – Thomas

Antwort

1

Soweit ich weiß, Azure-Warteschlangen haben keine Nachrichtenfilterfunktion.

Wenn Sie Azure ServiceBus-Themen und -Abonnements verwenden, können Sie basierend auf Nachrichteneigenschaften filtern.

ein Thema und Abonnements erstellen Sie einen Blick auf diesen Artikel haben:

Also lassen Sie sagt, haben Sie

  • Ein Thema, mit dem Namen erstellt "MyTestTopic"
  • Ein Abonnement mit dem Namen "MySubscription1" und mit eine SqlFilter „Status = 1“

    • Nur Nachrichten zum Thema mit einer Eigenschaft Status gesendet = 1 werden dieses Abonnement geroutet werden.
  • Ein Abonnement mit dem Namen „MySubscription2“ und mit einem SqlFilter „Status = 2“

    • Nur Nachrichten zum Thema mit einer Eigenschaft Status gesendet = 2 werden dieses Abonnement geroutet werden.

In Sie webjob können Sie Zweier-Funktion haben, die so aussieht:

public static void ProcessQueueMessage1(
    [ServiceBusTrigger("MyTestTopic", "MySubscription1")] BrokeredMessage incomingMessage, 
    ServiceBus("MyTestTopic")] out BrokeredMessage outputMessage) 
{ 
    // Status should be 1 
    Console.Out.WriteLine(incomingMessage.Properties["Status"]); 

    // Get your poco 
    var myPoco = incomingMessage.GetBody<TaskType>(); 

    //Process your message ... 
    .... 

    // clone the message 
    outputMessage = incomingMessage.Clone(); 

    // Set the status to 2 
    outputMessage.Properties["Status"] = 2 
} 

public static void ProcessQueueMessage2(
    [ServiceBusTrigger("MyTestTopic", "MySubscription2")] BrokeredMessage incomingMessage) 
{ 
    // Status should be 2 
    Console.Out.WriteLine(incomingMessage.Properties["Status"]); 

    // Do what you need 
} 

Im fisrt Methode verwenden wir eine ServiceBusTriggerAttribute für Nachrichten abzuhören zur Abo-1 und ein Kommen ServiceBusAttribute, um eine Nachricht an das Thema zu senden.

Wenn Sie eine Nachricht senden möchten, vergessen Sie nicht, die Eigenschaft "Status" der BrokeredMessage festzulegen.

+0

Ist der SqlFilter korrekt? Sie sagen: "Status = 2 -> Nur Nachrichten, die mit einer Eigenschaft Status == 1 an das Thema gesendet werden." Sollte es "Status == 2" sein? Schlägst du vor, mein Q zu aktualisieren, um ServiceBus zu verwenden? – OzBob

+0

Sorry, es war ein Fehler, Post bearbeitet – Thomas