【问题标题】:Getting message Specific to Tenant Id获取特定于租户 ID 的消息
【发布时间】:2018-10-10 14:23:52
【问题描述】:

当前主题接收所有消息,与 TenantId

无关

但我的要求是接收端只接收属于特定TenantId的消息。

示例:

目前情况如下

消息 1 租户 1 => 接收者
消息 2 租户 2 => 接收者

但现在它应该如下所示:

消息 1 租户 1 => 接收者(租户 1)
消息 2 租户 2 => 接收者(租户 2)

这是否可以通过PartitionKeyId实现?

请问有什么建议吗?提前致谢。

【问题讨论】:

    标签: c# azure azureservicebus


    【解决方案1】:

    您可以在主题上为每个订阅者添加规则,该规则将决定是否应将消息发送到订阅者队列。

    无法在 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);
    }
    

    然后在发送关于该主题的 BrokeredMessage(Microsoft.ServiceBus.Messaging 包)时,用当前租户定义 Tenant 属性

    var msg = new BrokeredMessage(e);
    msg.Properties.Add("Tenant", "Tenant1");
    

    【讨论】:

    • 我强烈建议试用 Service Bus Explorer。这允许您使用 GUI 工具检查规则并添加新规则 github.com/paolosalvatori/ServiceBusExplorer
    • @Svend 不错!用过但不知道可以从那里添加规则
    • @MarcusHöglund 我可以将这种方法用于现有的主题/订阅吗?
    • @MarirajR 是的,此解决方案适用于现有主题和订阅
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多