問題ここでは、webjob SDKはあなたが手動で仲介メッセージをシリアル化を解除するためのオプションを持って言ったように、メッセージがだから、タイプAまたはB
であるないアイデアを持っていないということです。私は、メッセージのタイプを指定するためにあなたの仲介されたメッセージにプロパティを追加するべきだと思います。
public static void ProcessMessageA([ServiceBusTrigger("MessageQueue")] BrokeredMessage message)
{
var messageType = (string) message.Properties["messageType"];
if (messageType == "MessageA")
{
// Deserialize the message
var messageA = message.GetBody<MessageA>();
// Process the message
}
else if (messageType == "MessageB")
{
// Deserialize the message
var messageB = message.GetBody<MessageB>();;
// Process the message
}
}
は、そうでなければ、あなたがの種類ごとに別々のキューを作成することができ、あなたのwebjobに一つだけの機能を持っているので、今
// Create the object you want to send
var messageA = new MessageA();
...
// Create the borkered message
var message = new BrokeredMessage(messageA);
// Add a property
message.Properties["messageType"] = "MessageA";
// Send the message
...
:
だから、そのようなものになる可能性がメッセージを送信しますメッセージ または2つのサブスクリプションでservice bus topicを作成します。
サブスクリプションを作成する際に、フィルタを指定できます。
string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
// Create the topic
namespaceManager.CreateTopic("TestTopic");
// Create subscription to handle message A
namespaceManager.CreateSubscription("TestTopic", "MessageA", new SqlFilter("messageType = 'MessageA'"));
// Create subscription to handle message A
namespaceManager.CreateSubscription("TestTopic", "MessageB", new SqlFilter("messageType = 'MessageB'"));
これで、MessageAとMessageBを処理する2つの異なる機能をWebjobに持たせることができます。
public static void ProcessMessageA([ServiceBusTrigger("TestTopic", "MessageA")] MessageA message) { }
public static void ProcessMessageB([ServiceBusTrigger("TestTopic", "MessageB")] MessageB message) { }