2012-03-08 2 views
31

Помимо асинхронного/синхронного характера конкретной проблемы и с учетом того, что MOM (в данном случае с выбранным JMS) предлагают дополнительные функции бесплатно, такие как балансировка нагрузки и другие, что еще можно рассмотреть при выборе JMS, а не REST или Vice -versa?Когда использовать JMS и когда использовать REST?

Thanks

+2

Это две разные технологии и шаблоны ... и в результате ваш вопрос не имеет смысла. – Nix

+9

@ Никс не такой педант. С точки зрения интеграции приложений, вполне справедливо рассматривать подход на основе REST или подход, основанный на MOM. Во всяком случае, я удивлен, что SOAP-сервисы тоже не рассматривались. –

+1

@Nix Я могу достичь той же интеграции, используя либо технологии, поэтому вопрос является префектом. на самом деле большой вопрос. –

ответ

40

Всегда используйте ОТДЫХ. Это самый современный, продвинутый и масштабируемый интеграционный подход, доступный сегодня. Балансировка нагрузки службы на основе REST достигается просто с помощью аппаратного или программного HTTP-балансировщика нагрузки и может считаться столь же свободным, как и балансировка нагрузки в JMS.

MOM (Message Oriented Middleware) не масштабируется легко (но может масштабироваться достаточно большим для ваших нужд). REST работает в масштабе сети.

MOM не имеет economies of scale. Для запросов на получение данных каждый раз, когда запрашивается конкретная часть данных, другое сообщение должно быть отправлено на сервер и на него отвечает сервер. В системе на основе REST запросы на одни и те же данные могут обслуживаться HTTP cache. Это означает, что по мере увеличения объема запросов с течением времени система на основе MOM увидит увеличение загрузки сервера с той же скоростью, что и запросы. Система на основе REST увидит увеличение загрузки сервера с меньшей скоростью, чем запросы.

MOM соблазнит вас сообщениями о пожаре и забывании с гарантированной доставкой, только чтобы укусить вас chain of custody problem.

MOM ужасен для синхронного запроса-ответа, так как он будет терпеть неудачу (т. Е. Ждать таймаута), когда сервер не работает. Когда запрос будет терпеть неудачу, вы хотите, чтобы он быстро провалился. HTTP-запрос к службе на основе REST будет немедленно сбой (при подключении TCP), если сервер не работает.

MOM используется для асинхронного запроса ответа сообщениями, но тогда вы будете оставаться с проблемой, где хранить состояние в период между запросом и ответом (Подсказка: Ваши варианты File or Regular Database, то Message или NoSQL Database). Часто дополнительные усилия по осуществлению не стоят ощутимых преимуществ асинхронности. Также службы на основе REST поддерживают асинхронные запросы, если вам это действительно нужно. 202 Accepted - твой друг в этой ситуации.

И, наконец, использование кеширования позволяет системам на основе REST реализовывать интеграцию на основе pull-based, которые намного легче поддерживать. Например, просто скажите, что мы хотим переместить данные из системы A в систему B. Подход MOM должен был отправлять сообщения от A до B. Подход, основанный на REST, заключался бы в создании службы передачи данных в A (например, в RSS-канале) что B опроса для новых данных (так же, как ваш RSS-ридер публикует опросы для новых статей). Когда B терпит неудачу, в примере MOM команде поддержки необходимо будет следить за очередями сообщений, чтобы убедиться, что они не переполняются, а кто-то другой получает B обратно. В примере REST команда поддержки просто должна беспокоиться о том, чтобы вернуть B. Когда A терпит неудачу, нет большой разницы. В примере MOM B не знает и не заботится. В примере REST B знает, что A не работает, но все равно все равно, потому что, очевидно, нет новых данных от A, когда он выключен. Первоначально опрос, основанный на использовании pull-based-интеграции, требует, чтобы швы были очень неэффективными, однако HTTP-кеширование делает это проблемой.

Другими словами, вместо того, чтобы инвестировать в JMS-сервер, инвестируйте в хороший кеширующий загрузчик нагрузки HTTP.

+2

Мне очень нравится этот ответ. +1 :) – ses

+14

«Всегда использовать ОТДЫХ» - ужасный ответ. Есть, конечно, много действительных случаев, когда REST является более подходящим выбором, но есть и многие другие, где MOM - лучший выбор. –

+0

@PaulLegato Я работаю в пространстве MOM более десяти лет. Это мое хлебное масло, и это отстой. Gimmie - пример, где MOM - лучший технический выбор, чем REST. –

13

Вы не можете сравнить эти две технологии.

REST - это сервис/шаблон, который даст вам организованный способ доступа к ресурсам без гражданства.

MOM Sysems/JMS - это шаблон, предназначенный для обмена сообщениями между системами. Его данные в данных, данные в надежном виде.


Вы не можете сравнить JMS с REST bc, они решают разные проблемы.

Но если ваш вопрос больше соответствует строкам, нужен ли мне REST-интерфейс для моих JMS-очередей? Вся его ситуация, я видел, что люди используют REST для защиты тонких клиентов от логических сообщений до очереди в JMS. Например. если у вас есть андроид-клиент, который хочет поговорить с JMS, гораздо сложнее сделать это naitvely по сравнению с нажатием сообщений на интерфейс «отдыха», который затем может перевести и нажать на JMS.

+0

Вы можете делиться надежными данными между системами, используя REST. Atom-каналы - прекрасный пример этого. –

+1

Я не говорю, что вы не можете. Это целая цель REST. – Nix

+2

«MOM Sysems/JMS - это шаблон, разработанный для обмена сообщениями между системами». Я говорю, что REST действительно хорош в этом. IMO вы можете очень легко сравнить JMS с REST, поскольку они оба ищут решения проблем интеграции приложений. У вас есть пример * чего-либо *, который лучше разрешен с помощью JMS, чем подход RESTful? –

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

  • Нет связанных вопросов^_^