获取特定于租户 ID 的消息
Getting message Specific to Tenant Id
当前主题接收所有消息,与 TenantId
无关
但我的要求是只有属于特定 TenantId 的消息才应该在接收端接收。
示例:
目前情况如下
Message 1 Tenant 1 => Receiver
Message 2 Tenant 2 => Receiver
但现在它应该表现如下:
Message 1 Tenant 1 => Receiver(Tenant1)
Message 2 Tenant 2 => Receiver(Tenant2)
是否可以通过PartitionKeyId来实现?
有什么建议吗?提前致谢。
您可以在主题上为每个订阅者添加规则,该规则将决定是否应将消息发送到订阅者队列。
无法在 Azure 门户中手动添加规则,但您可以根据 Microsoft.ServiceBus
nuget 包
通过以下脚本添加它们
var topicName = "yourTopicName";
var serviceBusConnectionString = "yourServiceBusManageRule";
var nameSpaceMgr = NamespaceManager.CreateFromConnectionString(serviceBusConnectionString);
var messagingFactory = MessagingFactory.CreateFromConnectionString(serviceBusConnectionString);
var tenants = new List<string>{ "Tenant1", "Tenant2" };
foreach (var tenant in tenants)
{
var subscriptionClient = messagingFactory.CreateSubscriptionClient(topicName, tenant);
var subscriberFilter = new SqlFilter($"Tenant = '{tenant}'");
var subscriberRuleName = "TenantRule";
var subscriberRule = new RuleDescription(subscriberRuleName, subscriberFilter);
var defaultRule = "$Default";
if (nameSpaceMgr.GetRules(topicName, tenant).Any(r=> r.Name == defaultRule))
{
subscriptionClient.RemoveRule(defaultRule);
}
if (nameSpaceMgr.GetRules(topicName, tenant).Any(r => r.Name == subscriberRuleName))
{
subscriptionClient.RemoveRule(subscriberRuleName);
}
subscriptionClient.AddRule(subscriberRule);
}
然后在topic上发送BrokeredMessage(Microsoft.ServiceBus.Messaging
包)时,用当前租户
定义Tenant属性
var msg = new BrokeredMessage(e);
msg.Properties.Add("Tenant", "Tenant1");
当前主题接收所有消息,与 TenantId
无关但我的要求是只有属于特定 TenantId 的消息才应该在接收端接收。
示例:
目前情况如下
Message 1 Tenant 1 => Receiver
Message 2 Tenant 2 => Receiver
但现在它应该表现如下:
Message 1 Tenant 1 => Receiver(Tenant1)
Message 2 Tenant 2 => Receiver(Tenant2)
是否可以通过PartitionKeyId来实现?
有什么建议吗?提前致谢。
您可以在主题上为每个订阅者添加规则,该规则将决定是否应将消息发送到订阅者队列。
无法在 Azure 门户中手动添加规则,但您可以根据 Microsoft.ServiceBus
nuget 包
var topicName = "yourTopicName";
var serviceBusConnectionString = "yourServiceBusManageRule";
var nameSpaceMgr = NamespaceManager.CreateFromConnectionString(serviceBusConnectionString);
var messagingFactory = MessagingFactory.CreateFromConnectionString(serviceBusConnectionString);
var tenants = new List<string>{ "Tenant1", "Tenant2" };
foreach (var tenant in tenants)
{
var subscriptionClient = messagingFactory.CreateSubscriptionClient(topicName, tenant);
var subscriberFilter = new SqlFilter($"Tenant = '{tenant}'");
var subscriberRuleName = "TenantRule";
var subscriberRule = new RuleDescription(subscriberRuleName, subscriberFilter);
var defaultRule = "$Default";
if (nameSpaceMgr.GetRules(topicName, tenant).Any(r=> r.Name == defaultRule))
{
subscriptionClient.RemoveRule(defaultRule);
}
if (nameSpaceMgr.GetRules(topicName, tenant).Any(r => r.Name == subscriberRuleName))
{
subscriptionClient.RemoveRule(subscriberRuleName);
}
subscriptionClient.AddRule(subscriberRule);
}
然后在topic上发送BrokeredMessage(Microsoft.ServiceBus.Messaging
包)时,用当前租户
var msg = new BrokeredMessage(e);
msg.Properties.Add("Tenant", "Tenant1");