Получение сообщения, специфичного для идентификатора арендатора - PullRequest
0 голосов
/ 10 октября 2018

В настоящее время Тема получает все сообщения независимо от TenantId

Но мое требование состоит в том, чтобы только сообщение принадлежало определенному TenantId , который должен быть получен на стороне получателя.

Пример:

В настоящее время это происходит, как показано ниже

Сообщение 1 Арендатор 1 => Получатель
Сообщение 2 Арендатор 2 =>Получатель

Но теперь он должен вести себя следующим образом:

Сообщение 1, Арендатор 1 => Приемник (Арендатор1)
Сообщение 2, Арендатор 2 => Приемник (Арендатор 2)

Может ли это быть реализовано PartitionKeyId?

Любое предложение, пожалуйста?Заранее спасибо.

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете добавить правило для каждого подписчика в теме, где правило будет определять, следует ли отправлять сообщение в очередь подписчиков или нет.

Правила не могут быть добавлены вручную на портале 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 пакет) по теме, определите свойство Арендатор с текущим Арендатором

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