0

我得到了一个有很多消息的队列。

我要求每次读取/交易 200 条消息:

using (var connection = _configuration.ConnectionFactory.OpenConnection())
{
    using (var transaction = connection.BeginTransaction())
    {
        using (var command = connection.CreateCommand())
        {
            command.Transaction = transaction;
            command.CommandText = string.Format(ReadCommand, maxNumberOfMessagesPerRead, _queueName);

生成的 SQL:

RECEIVE TOP(200) message_body, conversation_handle FROM [BenchQueue]

但我每次阅读只会收到 100 条消息。SQL Server 有限制还是我做错了什么?

4

1 回答 1

2

语句将RECEIVE仅返回属于单个会话组的消息。这样做是为了简化多线程环境中相关消息的处理(max_queue_readers > 1)。有关详细信息,请参阅对话组锁定

除非您进行任何明确的对话组管理,否则每个单独的对话都是一个单独的对话组。因此,您的队列中每个对话可能只有 100 条消息。

于 2013-03-04T17:18:20.053 回答