2013-02-13 2 views
2

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

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

ответ

4

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

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

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

+0

Спасибо. Вы разобрались в этом :) – 2013-02-13 20:44:55

Смежные вопросы