2

C#でRabbitMQを使用しています。これが私のシナリオです

  1. 別のプロセスがメッセージをキューに公開します
  2. クライアントはキューからN個のメッセージのセットを読み取る必要があります
  3. N個のメッセージを処理する
  4. N個のメッセージを確認します

同じチャネルで、メッセージを受信して​​処理し、確認します。サーバープロセスはメッセージを公開し続けます。私が直面している問題は、次の一連のメッセージを取得しようとすると、公開プロセスによって公開されたのと同じ順序でメッセージが届かないことです。メッセージはランダムな順序で届きます。最初のメッセージセットのみが正しい順序で送信されます。

ここで何が問題になっているのですか?次のメッセージセットにアクセスするための新しいチャネルを作成していませんか?以下はサンプルコードです。

while (true)
         {
             using (IModel getChannel = MQConnection.CreateModel())
             {
                 // Create a consumer
                 QueueingBasicConsumer consumer = CreateQueueConsumer(getChannel, exchangeName, queueName);

                 int numberOfMessages = 100;
                 // Next Recieve
                 List<object> msgSet = GetNextSetOfMessages(consumer, getChannel, exchangeName, queueName, numberOfMessages, out finalDeliverytag);


                 // Do some processing

                 if (finalDeliverytag > 0)
                     AckFinishedMessages(exchangeName, queueName, finalDeliverytag, getChannel);

                 if (finalDeliverytag == 0)
                     break;

             }
         }

親切に助けてください。ありがとう!

4

0 に答える 0