【问题标题】:Azure, SubscriptionClient.OnMessage, and SessionsAzure、SubscriptionClient.OnMessage 和会话
【发布时间】:2016-07-08 06:03:24
【问题描述】:

Azure 服务总线订阅客户端是否支持在订阅需要会话时使用 OnMessage 操作的功能?

我有一个订阅,名为“TestSubscription”。它需要一个 sessionId 并包含由 SessionId 绑定在一起的多部分数据。

if (!namespaceManager.SubscriptionExists("TestTopic", "Export"))
{
    var testRule = new RuleDescription
    {
        Filter = new SqlFilter(@"(Action='Export')"),
        Name = "Export"
    };

var subDesc = new SubscriptionDescription("DataCollectionTopic", "Export")
{
    RequiresSession = true
};
namespaceManager.CreateSubscription(sub`enter code here`Desc, testRule);
}

在一个单独的项目中,我有一个 Service Bus Monitor 和 WorkerRole,而在 Worker Role 中,我有一个名为“testSubscriptionClient”的 SubscriptionClient:

testSubscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, _topicName, CloudConfigurationManager.GetSetting("testSubscription"), ReceiveMode.PeekLock);

然后我希望在将新项目放入服务总线队列时触发 OnMessage:

testSubscriptionClient.OnMessage(PersistData);

但是我在运行代码时收到以下消息:

InvalidOperationException:需要会话的实体不可能创建非会话消息接收器

我正在使用 Azure SDK v2.8。

我想做的事可能吗?是否需要在我的服务总线监视器、订阅客户端或其他地方进行特定设置,以便我以这种方式从订阅中检索消息。附带说明一下,这种方法在我不使用会话数据的其他情况下非常有效。

【问题讨论】:

    标签: session azure azureservicebus servicebus


    【解决方案1】:

    你能试试这个代码吗:

    var messageSession=testSubscriptionClient.AcceptMessageSession();
    
    messageSession.OnMessage(PersistData);
    

    除此之外:

    testSubscriptionClient.OnMessage(PersistData);
    

    编辑: 此外,您可以注册您的处理程序来处理会话 (RegisterSessionHandler)。它会触发你的每一个新动作。

    我觉得这个更适合你的问题。

    article 中,他展示了两种方式。它用于队列,但我认为您也可以将其应用于主题。

    【讨论】:

    • 这适用于启动时的一条消息;这意味着 AcceptMessageSession 将从服务总线订阅中获取下一个会话并按预期执行。但如果服务总线中有其他会话消息,则不会检索它们。这个调用应该放在 Run() 方法中吗?
    • 我认为在您收到消息后,您应该再次调用 AcceptMessageSession。在这里查看jayway.com/2014/08/28/…这是异步的。
    • 这是有道理的。除了我不知道何时将消息输入到服务总线中。所以我需要我的服务总线监视器能够检测新消息并在发现新消息时触发事件。似乎链接中的解决方案,甚至只是调用 AcceptMessageSession 都依赖于我知道有新会话在等待,并且有一些“触发器”来调用所述代码。
    • @KamauMalone 我已经编辑了答案。我认为RegisterSessionHandler 更适合您的解决方案。
    • 就是这样——RegisterSessionHandler 成功了。非常感谢您对本二看的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多