2012-04-11 3 views
0

Мы планируем внедрить нашу новую систему с Java. Из-за характера системы, с которой необходимо взаимодействовать с различными системами интрасети/экстрасети/Интернета и использовать одну и ту же логику (с небольшими изменениями) с помощью различных внешних систем, мы планируем вывести бизнес-логику из интерфейса, сделать ее как услугу , и планируют использовать JMS для соединения уровня представления и уровня бизнес-логики. Уровень представления отправляет запрос, уровень бизнес-логики посылает ответ для результата обработки.JMS для шаблона запроса-ответа

После выполнения небольшой системы POC мы нашли этот способ очень перспективным. Но ребята из Oracle (мы планируем использовать weblogic как для ap-сервера, так и для JMS-сервера) говорят, что проблема с производительностью всегда будет, поскольку природа очереди сообщений не предназначена для шаблона запроса-ответа.

Есть ли какие-либо предложения по поводу мнения Oracle? Мы довольно новичок в мире Java (не имеем опыта работы с Java и должны внедрять эту систему самостоятельно, без аутсорсинга), и хотя мы тестировали наш POC с примерно 300 req-resp в секунду (чего, кажется, достаточно для наших система), мы все еще не можем быть уверены, что после системы будет определенно ухудшение производительности ...

+0

Если вы просто вызвали вызовы метода асинхронной службы, новые методы EJB ['@ Asynchronous'] (http://docs.oracle.com/javaee/6/api/javax/ejb/Asynchronous.html) в Java EE 6 может выполнять эту работу. Если вы используете более общую службу запроса/ответа типа «точка-точка» с несколькими интерфейсами, я предлагаю вам взглянуть на структуру или платформу ESB, чтобы помочь вам. –

+0

@AlistairIsrael Мы планируем использовать jpa, но не часть ejb, поскольку она известна своей трудно реализуемой, и нам по крайней мере требуется более 10000 ejb-объектов. ESB будет работать на стороне экстрасети, но для части интрасети нам нужно что-то более простое, таким образом, jms – dhchen

ответ

2

Определенно не проблема производительности как таковая.

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

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

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

+0

Спасибо за часть производительности. Что касается вашего последнего абзаца (ошибки в среде async), можете ли вы дать мне некоторый намек на дескриптор ошибки, о котором вы говорили? 2-фазная фиксация? – dhchen

+0

В вашем сценарии у вас будет три отдельных независимых единицы работы. Requester помещает, сервер получает и ставит ответ, Requester получает. Как вы обрабатываете ошибки и сбои, очень привязаны к вашим бизнес-требованиям. –

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