Мне было интересно, могу ли я получить некоторые идеи о том, как справиться с проблемой дизайна, с которой я столкнулся. Для простоты предположим, что у меня есть 3 конечных точки, работающих на 3 разных машинах/jvms на Tomcat. Концы имеют следующие обязанности:Распределенные транзакции Java JMS
конечной точка 1 - принимают в данном спросе и преобразует эти данные в порядок запрашивает
Endpoint 2 - принимает в запросах заказа, сохраняет порядок и возвращает приказ
Endpoint 3 - принимает заказ, форматирует в конкретный xml поставщика и отправляет его в очередь.
Редактировать: Эти конечные точки существуют как текущие службы для других клиентов через REST. У меня есть возможность использовать Atomikos для JTA Transaction Manager, и мы используем ActiveMQ.
С учетом этого у меня есть настройка очереди, которая получает сообщения данных о требованиях. Для каждого принятого сообщения данных запроса я, по сути, хочу погрузить их через каждую из трех конечных точек в одну единицу работы через XA. Я полностью контролирую каждую из трех конечных точек, поэтому у меня есть определенная гибкость в отношении того, какие протоколы связи они могут использовать. Кроме того, в конечном итоге на ежедневной основе поступит около 500 тыс. До 1 млн. Сообщений. Какой протокол связи вы бы использовали, чтобы связать эти конечные точки вместе в распределенной транзакции?
У меня есть опыт работы с Camel, но я получаю то, как связать их вместе в одной единице работы. Будет ли RMI более уместным, чем JMS, поскольку это кажется синхронным по своей природе? Спасибо заранее за любую помощь, которая предоставляется.
Как долго длится эти транзакции? И как часто их нужно будет отбросить назад? – flup
С моей точки зрения, нет смысла говорить, с одной стороны, я хочу разделить вещи и принять асинхронный подход по причине разладов, а с другой стороны, я хочу связать их высоко, заявив, что шаг 1 является успешным только в том случае, если шаг 3 успешный. И вы должны знать, что длительные транзакции повреждают пропускную способность такой системы. Итак, к вашему последнему вопросу: ДА, синхронный протокол, такой как RMI или WebServices с одним контроллером, облегчит вашу работу и поможет сохранить короткие трансляции, поскольку они синхронизированы хорошо. –
@Sir RotN, Спасибо за ответ и идеи. Несмотря на то, что я пытаюсь объединить эти конечные точки вместе в одну транзакцию, эти конечные точки в настоящее время существуют как службы для других клиентов. У них есть интерфейсы служб REST, которые могут использовать пользовательские интерфейсы. – kdye43