JMS MDB или ScheduledThreadPoolExecutor для асинхронных задач

Я использую JMS Message Driven Bean некоторое время, и он отлично работает для асинхронных задач. Я знаю, что существует множество способов обработки асинхронных процессов, но мне просто любопытно, каковы преимущества использования JMS Message Driven Bean и ScheduledThreadPoolExecutor?

Например, у меня есть веб-служба, которая асинхронно обрабатывает некоторые задачи. Итак, я вижу два основных отличия. Если бы я использовал ScheduledThreadPoolExecutor, мне не нужен сервер приложений, я мог бы использовать контейнер сервлета, например. Tomcat, поскольку я не использую никаких материалов EJB, для MDB мне нужен сервер приложений, например. Стеклянная рыба. Но с точки зрения обработки фактического асинхронного процесса, каковы преимущества каждого из ScheduledThreadPoolExecutor и MDB?


person Community    schedule 13.02.2013    source источник


Ответы (1)


ScheduledThreadPoolExecutor используется для планирования задач, абстракция, лучше всего соответствующая MDB, - это ExecutorService. Но вернемся к вашему вопросу.

MDB более тяжеловесный, API намного сложнее и в принципе он фактически предназначен для передачи данных, а не логики. С другой стороны, ExecutorService — это тонкий слой поверх фактического пула потоков. Поэтому, если вам нужна производительность, низкая задержка и небольшие накладные расходы, выбирайте обычный пул потоков.

Единственная причина для MDB и JMS — когда вам нужна надежность и поддержка транзакций. Это, конечно, приводит к еще большим накладным расходам, поскольку каждое сообщение необходимо сохранять. Но вы не потеряете никакие задачи, которые стоят в очереди или даже в середине обработки не потеряны из-за сбоя.

person Tomasz Nurkiewicz    schedule 13.02.2013