1

私はSpringスケジューラとJMSを使用していますが、スケジューリングにはどちらが適していますか。

@Service
public class ScheduledProcessor implements Processor {

    private final AtomicInteger counter = new AtomicInteger();

    @Autowired
    private Worker worker;

    @Scheduled(fixedDelay = 30000)
    public void process() {
        System.out.println("processing next 10 at " + new Date());
        for (int i = 0; i < 10; i++) {
            worker.work(counter.incrementAndGet());
        }
    }
}
4

1 に答える 1

0

これらのソリューションは根本的に異なります。

スケジュールされたサービスは、最後の実行から n ミリ秒ごとに開始され、利用可能なものはすべて処理されます。タイムリーに処理されることは保証されておらず、処理するデータの量が増加した場合 (および処理がある程度複雑な場合) はスケーリングされない可能性があります。

私はJMSに傾倒する傾向があります。まず、メッセージは受信時に処理され、サービスのようにポーリングされるのではなく、リスナーにプッシュされます。第 2 に、必要に応じて、メッセージを水平方向と垂直方向の両方にスケーリングして、実際の処理がアプリケーションを圧倒しないように、より多くの調整を行うことができます。

基本的な質問は次のとおりです。要件は何ですか?

于 2016-11-11T02:17:39.303 に答える