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]

しかし、1 回の読み取りで 100 件のメッセージしか取得できません。SQL Server に制限がありますか、それとも何か問題がありますか?

4

1 に答える 1

2

ステートメントは、単一のRECEIVE会話グループに属するメッセージのみを返します。これは、マルチスレッド環境 (max_queue_readers > 1) で相関メッセージの処理を簡素化するために明示的に行われます。詳細については、会話グループのロックを参照してください。

明示的な会話グループの管理を行わない限り、個々の会話は個別の会話グループになります。したがって、おそらく、キュー内の会話ごとに 100 件のメッセージしかありません。

于 2013-03-04T17:18:20.053 に答える