http 経由で多数のサプライヤの 1 つにメッセージを送信するシステムを再開発しています。オリジナルは perl スクリプトで、再開発でも perl を使用する可能性があります。
古いシステムでは、多数の perl スクリプトがすべて同時に実行され、各サプライヤーに 5 つずつありました。メッセージがデータベースに入れられると、ランダムなスレッド番号 (1 から 5) とサプライヤーが選択され、テーブル/行をロックする必要がなくなり、メッセージが 2 回処理されないようになりました。さらに、データベースには「Fair Queue Position」フィールドがあり、大きなメッセージの送信中に小さなメッセージの送信が遅延しないようにしていました。
1 分間に数件のメッセージしかない場合もあれば、数十万件のメッセージがダンプされる場合もあります。すべてのスクリプトを常に実行してメッセージをチェックするのはリソースの浪費のように思えるので、それを行うためのより良い方法があるかどうか、または古い方法が受け入れられるかどうかを調べようとしています。
私の考えは、現在、トラフィックの量に応じて、必要な数の子プロセスを (制限まで) 実行してフォークする 1 つのスクリプトを作成するという考えにありますが、それぞれが公平なキューイングが維持されている間、メッセージは 1 回だけ処理されます。
現在のところ、親スクリプトが DB を更新して、どの子プロセスがそれを処理する必要があるかを示していると思いますが、これは元の方法よりも効率が低下するのではないかと懸念しています。私は fork コードを書いた経験がほとんどありません (最後に行ったのは約 15 年前です)。
メッセージキューを処理する最善の方法に関するガイドへの考えやリンクは大歓迎です!