私はRabbitMQの一般的な使用例と考えています。 ワーカーキュー - サーバーはユーザーからの要求を取得し、後で処理するためにキューに格納します。問題は、タスクの一部は数分かかることがあり、そして私はいない自動ACKすることを決めたということです:Rabbitmq - メッセージを自動的に拒否しない場合の処理方法
私は仕事が終了したときに確認応答したいGetResponse response = channel.basicGet(queueName, false);
私が知っていることから、
channel.basicAck(deliveryTag, false);
: https://www.rabbitmq.com/confirms.html(「同じチャンネルにbasic.ackを送信する」 - メッセージを受信したのと同じチャンネルで確認が必要です)。
私はチャンネルへのメッセージのマップを持っていることに決めました(私の場合、メッセージごとに1つのチャンネルがあります)。メッセージの作業が完了するたびに、私は感謝します。
私はこのデザインに非常に欠陥があると思います。サーバーに状態を保存するよう強制され、チャンネルを再利用するのではなく、メッセージごとにチャンネルを持つように強制します。
これは広く普及しているユースケースであると確信しています。 1.スレッドローカルチャネルを使用することにしますか?もしそうなら、別のスレッドのメッセージを確認するのはいいですか? 2.このメッセージを保存するよりも、保留メッセージを処理する方がいいですか?>チャネルマップですか?
は私があまりにもひどくjavaのに慣れていないんだけど、私は、スレッドごとに単一のチャネルを持つことが正しいと理解して何からあなたに
にメッセージをACKに必ずとチャネルオブジェクトが何らかの形で閉じている場合、私はそれを再度開くことができます - connection.createChannel(チャネル番号)を - と、そのチャネル上でそれを確認応答? – user967710
また、チャンネルは決して閉じられませんか? – user967710