模拟服务总线队列中的自动完成

时间:2017-02-14 16:57:27

标签: azure azureservicebus azure-servicebus-queues

我使用IMessageSessionAsyncHandler的自定义实现来从分区服务总线队列中读取。分区数量相当大,队列中写入的消息量也相当大。 MaxConcurrentSessions设置为默认值。

假设在分区上统一分发消息,我试图最大化已处理消息的数量。 MessageWaitTimeout设置为1秒,以避免在分区上没有新消息时浪费时间。

现在我要做的是在处理一定数量的消息时强制关闭会话,以便另一个会话读者有机会处理其消息(在OnMessageAsync方法中)。在关闭会话之前,我需要模拟会话中已读但尚未完成的所有消息的完成(Autocomplete设置为true)。换句话说,模拟Autocomplete触发器的动作。你知道有没有办法做到这一点?

如果我将Autocomplete设置为false并手动完成每条消息,则性能会降至不可接受的水平(同时完成的批处理消息确实会提高读取量)。

 public async Task OnMessageAsync(MessageSession session, BrokeredMessage message)
    {
        try
        {
            _callback(message);
            if (++_processedMessages >= n)
            {
                //simulate the action of Autocomplete for the batched msg
                await OnCloseSessionAsync(session);
            }
        }
        catch (Exception ex)
        {
            Logger.Error(ex, "Error handling brokered message");
        }
    }

0 个答案:

没有答案