C#でRabbitMQを使用しています。これが私のシナリオです
- 別のプロセスがメッセージをキューに公開します
- クライアントはキューからN個のメッセージのセットを読み取る必要があります
- N個のメッセージを処理する
- 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;
}
}
親切に助けてください。ありがとう!