我想使用代理服务(rest)向特定订阅发送消息,我该怎么做。
如果某个主题有很多订阅,并且我想向特定订阅发送消息。
我想使用代理服务(rest)向特定订阅发送消息,我该怎么做。
如果某个主题有很多订阅,并且我想向特定订阅发送消息。
主题上的每个订阅都应该有自己的规则(订阅),向主题发送消息的客户端通常不想知道要发送到哪个订阅。
如果您确实需要这个,请尝试以下操作:
Client -> Topic | Subscription 1 | *
| Subscription 2 | properties.customername = "A"
| Subscription 3 | properties.customername = "B"
| Subscription 4 | properties.special = "123"
要仅向一个订阅发送消息,请确保所有订阅都具有唯一订阅。在上面的示例中,订阅 1 接收所有消息,将其更改为如下所示:
Client -> Topic | Subscription 1 | properties.customername EXISTS
| Subscription 2 | properties.customername = "A"
| Subscription 3 | properties.customername = "B"
| Subscription 4 | properties.special = "123"
另一种解决方案可能是创建一个单独的主题来处理此问题,并且该主题可以将所有其他请求“转发”到您的常规主题。(可以链接主题以创建此行为) https://azure.microsoft.com/en-us/documentation/articles/service-bus-auto-forwarding/
终于我得到了这个问题的答案。回答有以下步骤。
@"<entry xmlns=""http://www.w3.org/2005/Atom"">
<title type=""text"">" + SubscriptionName + @"</title>
<content type=""application/xml"">
<SubscriptionDescription xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/netservices/2010/10/servicebus/connect"" >
<DefaultRuleDescription>
<Filter i:type=""SqlFilter"">
<SqlExpression>" + "VenueId='" + venueId + "' or CustomerId='" + customerId + @"'</SqlExpression>
<CompatibilityLevel> 20 </CompatibilityLevel>
</Filter>
<Action i:type = ""EmptyRuleAction""/>
<Name>$Default</Name>
</DefaultRuleDescription>
</SubscriptionDescription>
</content>
</entry>";
webClient
添加在 sql 过滤器中使用的同名标题,如下所示webClient.Headers.Add("CustomerId", customerId);
webClient.Headers.Add("VenueId", venueId);
创建订阅。将创建此订阅并具有一些过滤器。
在客户端检索消息时,还将这两个标头添加到webClient
. 这样它就会收到只有过滤器的CustomerId
消息VenueId
webClient.Headers.Add("CustomerId", customerId);
webClient.Headers.Add("VenueId", venueId);
webClient.Headers.Add("CustomerId", customerId);
webClient.Headers.Add("VenueId", venueId);