Альтернатива JMS - PullRequest
       9

Альтернатива JMS

3 голосов
/ 10 февраля 2011

Я читал блог, и одним из пунктов было «если вы используете очереди, вы все испортили», в контексте JMS.

Я думал, нужен ли нам JMS?Простая альтернатива: если вам нужно что-то делать асинхронно, почему бы просто не поместить запрос задания в таблицу где-нибудь и не запустить какой-нибудь процесс (ы), опрашивающий базу данных каждые X единиц времени в поисках новых заданий?

Этот подход проще, чем JMS, он прост для понимания и в основном удаляет зависимость от приложения.

Что я теряю, если использую альтернативу, которую я описал?Возможно, кто-то теряет возможность использовать JMX для администрирования, но если «очередь» вашей работы подается из таблицы, вы можете написать простой код для «управления» обработкой.

Ответы [ 4 ]

3 голосов
/ 10 февраля 2011

Я читал блог, и одним из пунктов было «если вы используете очереди, вы все испортили» в контексте JMS.

Это просто неправильно.

Вы можете запутаться, выбрав использование очереди, когда она не подходит, но если это JMS, то это хороший выбор.

Я бы более разборчив в том, что я читаю наИнтернет на твоем месте.Мне кажется, что автору нравилось делать подстрекательские заявления, чтобы оживить свой блог и увеличить его статистику Google Analytics.Это мнение одного человека, не более того.

Решение для опроса является более сложным, расточительным из-за циклов ЦП и, на мой взгляд, не в реальном времени.

Вы можете использовать Executor или FutureTask, если хотитеасинхронная обработка.Это были бы разумные альтернативы очереди, если асинхронизация - это все, что вам нужно.

2 голосов
/ 10 февраля 2011

Мне бы очень хотелось узнать, где вы это читаете.JMS - это в значительной степени проверенная технология, но, как и во всех решениях, вы также можете использовать ее не по назначению.Если вам нужно планировать задачи, вы можете использовать одну из многих библиотек планирования задач.Вот краткий обзор: http://java -source.net / open-source / job-schedulers

0 голосов
/ 07 июня 2017

Этот подход проще, чем JMS, он прост для понимания и в основном удаляет зависимость от приложения.

Что ж, это верно только в том случае, если вы работаете в фоновом режиме базы данных.Я думаю, что нет ничего проще, чем отправлять сообщение для каждого изменения состояния и «забыть об этом».

Одним из преимуществ промежуточного программного обеспечения, ориентированного на сообщения (например, JMS), является более высокая производительность - скорость может составлять 1 мс / с, но большее преимущество, как правило, заключается в более чистой архитектуре: шине сообщений, к которой подключаются несколько компонентов.Прямо сейчас у вас есть личное общение, но через 2 года вы можете захотеть регистрировать этот трафик, через 3 года вы можете захотеть отслеживать ошибки, а через 4 года вы можете захотеть автоматически записывать, воспроизводить и тестировать его..

0 голосов
/ 23 августа 2014

Для очень простых требований только асинхронной обработки, вы можете использовать любой подходящий класс из пакета java.util.concurrent.

Если вам нужны транзакции или гарантия того, что задание должно быть успешно выполнено после отправки, дажев случае сбоев системы (программных или даже аппаратных сбоев) или если вы хотите перенести обработку задания в другой процесс, вам нужно другое решение.

Подход JMS может предоставить очень сложное решение с относительно меньшими усилиями.

Обмен сообщениями (или JMS) - это очень стандартное интеграционное решение, которое может решить проблему обеспечения асинхронной передачи заданий и обеспечения отсутствия связи между задачами и фактической обработкой.Решение, основанное на обмене сообщениями, может быть легко масштабировано за счет увеличения числа потоков «обработчика заданий», прослушивающих очередь заданий.Трафик будет автоматически сбалансирован по нагрузке.Системы обмена сообщениями также могут обеспечивать поддержку транзакций, то есть автоматически помещать сообщение обратно в очередь, если обработка задания завершается неудачно, чтобы его можно было повторить.

Многие корпоративные шаблоны интеграции основаны на системах обмена сообщениями (промежуточное ПО, ориентированное на сообщения).).В этой книге * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 * * * * * *1011* * * * * * * * * * * * * * * * 1011В таблице «Новые задания» обновите состояние строки, когда обработка обработки запускается приложением обработки, и в конечном итоге либо обновите состояние строки задания до «выполнено» (либо полностью удалите задание из таблицы).2) Если что-то пойдет не так во время обработки задания, статус задания должен быть изменен на «новый» на столе, чтобы механизм «опроса» мог снова забрать задание.Кроме того, возникнет необходимость в создании некоторого «потока восстановления» при запуске системы, чтобы найти задания, которые могут находиться в несогласованном состоянии, и перевести их обратно в «новое» состояние для повторного запуска обработки.

ВнизуСуть в том, что требуется много усилий, чтобы создать интеграционное решение, основанное на базе данных.Он также тесно связывает приложения «податель задания» и «обработчик задания» со схемой базы данных, которая нарушает инкапсуляцию вашей базы данных.Если ваш «обработчик заданий» имеет несколько потоков (которые вам, вероятно, понадобятся, если вы хотите масштабировать), вам нужно убедиться, что только один поток подхватывает задание и обновляет «эту» строку.

A JMSРешение решает эту проблему очень легко без ручного кодирования всей этой логики.

Конечно, если вы используете очереди, вы НЕ перепутались.Но у вас должен быть какой-то действительный вариант использования для внедрения промежуточного программного обеспечения для обмена сообщениями.

...