Управление очень длительными операциями с Java
на самом деле, у меня есть следующая схема:
- пользователь нажмите кнопку" огромная операция";
- Это называется спокойной службой;
- служба rest вызывает HugeOpServiceBean, который является EJB;
- этот EJB скажет очереди JMS, чтобы сделать HugeOperation;
- эта HugeOperation может иметь две или более реализаций, поэтому каждый MDBean, который слушает его, будет работать (что означает, что он может быть в другом .ухо)
Я хотел бы услышать, как вы, ребята, или предложить мне, чтобы я смог получить "статус" этих MDBeans.
в принципе, каждый MDBean будет запускать какой-то метод в списке какого-то типа объекта, поэтому, calc процент должен быть легким, я просто не знаю, как и какое лучшее архитектурное решение я мог бы сделать, чтобы сделать это доступным в каком-то RESTful сервисе.
спасибо заранее.
2 ответов
поскольку потребление и лечение MDB осуществляется, это все или ничего. Отображение прогресса будет сложным и потребует суб-транзакции для обновления прогресса. Я бы предложил chunnk работу в нескольких сообщениях JMS в EJB и отслеживать прогресс в терминах сообщений JMS, успешно потребляемых позже. См. Шаблоны интегрирования предприятия
спокойный способ справиться с этим было бы:
- верните клиенту код состояния HTTP 202 "принято" после первого вызова, чтобы указать, что запрос был успешным, но требуется дальнейшая обработка. Вы также можете предоставить URI с ответом, который клиент может использовать для запроса состояния "задания"
- реализуйте конечную точку, которую клиент может вызвать для запроса состояния задания.
- когда операция завершена, конечная точка из 2) выше будет выдавать постоянное перенаправление на фактический URI основного объекта, созданного операцией.