Azure服务总线实现

时间:2018-03-10 05:12:58

标签: azure

基本上我的'Maintopic'主题收到三种类型的xml文件('TEST','DEV','PROD')。

'MainSubscription'订阅该主题,现在基于XML文件类型,我需要将XML文件路由到:

  

各个主题(儿童主题)。

请参阅以下消息流。

<select name = "field_name">
<option value="<?php echo $_GET["field_name"]; ?>" selected > <?php echo 
$_GET["field_name"]; ?> </option>
{
 //you can add your dropdown condition here if you are fetching an array
}
</select>

我可以添加对'Maintopic'的订阅,但是我可以在哪里定义用于路由文件的所有过滤器逻辑?

我是Azure云的新手,我该怎么做?我甚至不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

Service Bus支持三种过滤条件:

  • 布尔过滤器 - TrueFilter和FalseFilter会导致所有到达的消息(true)或者没有为订阅选择到达的消息(false)。
  • SQL过滤器 - SqlFilter包含一个类似SQL的条件表达式,该表达式在代理中根据到达消息的用户定义属性和系统属性进行评估。
  • 相关过滤器 - CorrelationFilter包含一组与一个或多个到达消息的用户和系统属性匹配的条件。 您必须创建一个过滤订阅,该订阅仅接收您感兴趣的消息。

过滤器可以基于BrokeredMessage的任何属性,除了正文之外,因为这将要求每个消息被消毒以便传递给正确的订阅。你可以使用sql过滤器。 sql过滤器的一个例子如下 -

if (!namespaceManager.SubscriptionExists(topicName, filteredSubName1))
{
    namespaceManager.CreateSubscription(topicName, filteredSubName1, new SqlFilter("From LIKE '%Smith'"));
}

您不会将消息直接发送到订阅,而是将其发送到主题,并根据其过滤器将其转发给所有相关订阅。以下是示例 -

var message1 = new BrokeredMessage("Second message");
message1.Properties["From"] = "Alan Smith";
var client = TopicClient.CreateFromConnectionString(connectionString, topicName);
client.Send(message1);

以下是您收到消息的方式 -

var subClient = SubscriptionClient.CreateFromConnectionString(connectionString, topicName, subscriptionName);

var received = subClient.ReceiveBatch(10, TimeSpan.FromSeconds(5));
foreach (var message in received)
{
    Console.WriteLine("{0} '{1}' Label: '{2}' From: '{3}'", 
        subscriptionName,
        message.GetBody<string>(),
        message.Label,
        message.Properties["From"]);
}