Receiver Azure主题中未发生基于会话的筛选

时间:2018-10-23 05:44:21

标签: c# azure azureservicebus azure-servicebus-topics

我一直在研究启用会话的主题/订阅。

使用以下代码创建启用了会话的主题/订阅

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 :(得分:1)

您使用的方法

  

subscriptionClient.AcceptMessageSession()

将返回服务名称空间中所有启用会话的订阅中具有可用会话的消息。

使用

  

subscriptionClient.OnAcceptSessionReceiver()

接收带有特定“ sessionId”的消息。