首页 文章

Azure,SubscriptionClient.OnMessage和Sessions

提问于
浏览
1

当订阅需要会话时,Azure Service Bus订阅客户端是否支持使用OnMessage Action?

我订阅了一个名为“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: It is not possible for an entity that requires sessions to create a non-sessionful message receiver

我使用的是Azure SDK v2.8 .

我正在寻找的可能吗?我是否需要在服务总线监视器,订阅客户端或其他地方进行特定设置,以便以这种方式从订阅中检索消息 . 作为旁注,这种方法在我没有使用会话数据的其他情况下非常有效 .

1 回答

  • 1

    你能试试这段代码吗:

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

    除此之外:

    testSubscriptionClient.OnMessage(PersistData);
    

    Edit: 此外,您可以注册处理程序以处理会话( RegisterSessionHandler ) . 每次新动作都会触发你的手柄 .

    我认为这更适合你的问题 .

    他表现出两种方式,在这个article . 这是队列,但我认为你也可以将它应用于主题 .

相关问题