1

メッセージの種類に基づいて適切なハンドラー/操作/サブスクライバーにメッセージをルーティングするための azure の方法はありますか?

NServiceBus では、イベントが発行されると、イベントを処理できるサブスクライバーのみが呼び出されます。WCF が RPC フレームワークであり、特に "メッセージ指向" ではないことを考えると、Azure サービス バスはどのようにこれを達成するのでしょうか。

  1. モナドのハンドラー。NServiceBus、ServiceStack および
  2. ネイティブではなく POCO のメッセージ。

そうは言っても、 Type のメッセージを送信する必要がありますMyMessage。AzureServiceBus は、このメッセージをMyMessageHandlerWCF サービスに渡すことだけをどのように認識しますか? メッセージのプロパティとルーティングを構成することはできましたが、NServiceBus のような単純な規則が 99% のユース ケースで非常にうまく機能した場合、それは本当の PITA です。

4

2 に答える 2

1

まず、基になる型に基づくルーティングは、azure SB のすぐに使える機能であるべきだというあなたの意見に、私は確かに同意します。

NSB は、EnclosedMessageTypes と呼ばれるメッセージのヘッダー プロパティを公開することで、タイプに基づくルーティングを可能にします。

ASB はメッセージ ルーティングを有効にするために BrokeredMessage 型に依存しているため、既定では含まれている型をプロパティとして公開しないため、メッセージを送信する前に自分でプロパティを昇格せずにこの種のルーティングを有効にする方法がわかりません。

myMessage.Properties.Add("type", typeof(myUnderlyingType)); 
于 2013-04-03T08:27:42.337 に答える
1

これには、Service Bus でCorrelationFilterを使用できます。デフォルトでは、文字列のみを指定すると、メッセージのCorrelationIdプロパティと一致します。または、 ContentTypeなどの他のシステム プロパティの値を指定するか、独自のユーザープロパティを使用してフィルタリングすることもできます。

使用できるさまざまなタイプのパターンについて説明し たブログ記事次に示します。

以下は、さまざまなフィルターの使用を紹介するサンプルです: http://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-6b0d2749

// Create a topic and 3 subscriptions. 
        TopicDescription topicDescription = namespaceManager.CreateTopic(Program.TopicName); 
        Console.WriteLine("Topic created."); 

        // Create a subscription for all messages sent to topic. 
        namespaceManager.CreateSubscription(topicDescription.Path, SubsNameAllMessages, new TrueFilter()); 
        Console.WriteLine("Subscription {0} added with filter definition set to TrueFilter.", Program.SubsNameAllMessages); 

        // Create a subscription that'll receive all orders which have color "blue" and quantity 10. 
        namespaceManager.CreateSubscription(topicDescription.Path, SubsNameColorBlueSize10Orders, new SqlFilter("color = 'blue' AND quantity = 10")); 
        Console.WriteLine("Subscription {0} added with filter definition \"color = 'blue' AND quantity = 10\".", Program.SubsNameColorBlueSize10Orders); 

        // Create a subscription that'll receive all high priority orders. 
        namespaceManager.CreateSubscription(topicDescription.Path, SubsNameHighPriorityOrders, new CorrelationFilter("high")); 
        Console.WriteLine("Subscription {0} added with correlation filter definition \"high\".", Program.SubsNameHighPriorityOrders); 
于 2013-04-03T16:18:26.693 に答える