Фильтрация на основе сеансов не выполняется в теме Receiver Azure - PullRequest
0 голосов
/ 23 октября 2018

Я работал над темой / подпиской, поддерживающей сеанс.

Использовал следующий код для создания темы / подписки, включенной в сеанс,

var subscriptionName = "TestSubscription";
        var topicName = "MyPartitionTopic";
        var namespaceManager = NamespaceManager.CreateFromConnectionString(RuntimeConfig.ConnectionStrings.PrimaryAzureSb);
        if (!namespaceManager.TopicExists(topicName))
        {
            var td = new TopicDescription(topicName);
            td.EnablePartitioning = true;
            namespaceManager.CreateTopic(td);
        }
        if (!namespaceManager.SubscriptionExists(topicName, subscriptionName))
        {
            var sd = new SubscriptionDescription(topicName, subscriptionName);
            sd.RequiresSession = true;
            namespaceManager.CreateSubscription(sd);
        }

При получении сообщения в Receiver, фильтрация на основе sessionIdне происходитЯ использовал следующий код в Receiver,

 void ReadMessage(string ConnectionStrings, string topicName, string subscriptionName, MessagingFactory messagingFactory, int batchcount)
    {
        int receivedMessages = 0;
        SubscriptionClient subsClient =
            messagingFactory.CreateSubscriptionClient(topicName, subscriptionName, ReceiveMode.ReceiveAndDelete);
        string sessionId = "sessionId1";
        subsClient.AcceptMessageSession(sessionId);

        IEnumerable<BrokeredMessage> messages = subsClient.PeekBatch(batchcount);
    }

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

Сценарий 1 .sessionId = sessionId1
Сценарий 2 .sessionId = sessionId2

Получатель:
Предположим, мне нужно получить сообщения, которые имеют только sessionId1, но, используя описанный выше метод, он просто возвращает верхний пакет записи (это может быть sessionId1 илиsessionId2)

  1. как получить точно совпадающее сообщение с таким же идентификатором sessionId?
  2. есть ли какая-либо другая функция, кроме sessionId, для достижения того же самого?

Заранее спасибо.

1 Ответ

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

Метод, который вы использовали

subscriptionClient.AcceptMessageSession ()

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

Используйте

subscriptionClient.OnAcceptSessionReceiver ()

для получения сообщения с определенным идентификатором sessionId.

...