2016-12-26 7 views
0

Я собираюсь сократить его, у нас есть продукт, который использует BPM и внутреннюю очередь с большим количеством EJB (реализация pojo). Мы решили добавить REST к продукту, и мы обнулим его для JAX-RS и Swagger для документации. Теперь мы создали конечную точку, указывающую на асинхронный сценарий таким образом, что при получении запроса REST мы запускаем поток BPMN асинхронно, а затем ожидаем согласованную продолжительность ожидания для завершения потоков, чтобы мы могли параллельно отправлять ответ на внутреннюю очередь , которые получают сообщение при завершении обработки потока BPMN, а затем могут создавать ответ REST.REST и blockingqueue

Я ищу шаблон предприятия или какую-то полезную инфраструктуру, чтобы помочь мне достичь этого и не изобретать его сам. Я знаю, что у Camel есть много таких шаблонов, но я не уверен, что я ищу что-то доступное на JDK 1.6, совместимом с каркасом, чтобы имитировать это синхронное поведение.

У меня было бы что-то вроде RxJava или некоторого шаблона уведомителя наблюдателя, вероятно, нет внутренних JMS-очередей для передачи сообщения между потоками. То, что я ищу, является параллельным и потокобезопасным почвоуплотнением.

ответ

0

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

Если вы используете JAX-RS, тогда вам, вероятно, знакомятся с Asynchronous Server API. Для медленной, но синхронной операции вы должны просто dispatch a task to your executor и возобновить приостановленный запрос, когда у вас есть результат.

Другой подход заключается в сохранении приостановленного запроса в общей структуре данных с работником, ответственным за наблюдение за завершенными потоками, поиском приостановленного запроса и отправкой ответа.

ResponseServlet от продажи билетов демонстрации Майкл Баркер показывает эту основную идею (код Баркера использует сервлеты, а не JAX-RS, и Disruptor, а не RxJava, так что вам нужно перевести).

Дополнительных ресурсов по обработке ответа асинхронного