Что лучше в этом случае - синхронизация или асинхронный веб-сервис? - PullRequest
3 голосов
/ 21 января 2010

Я настраиваю веб-сервис в Axis2, задачей которого будет взять кучу XML и поместить его в очередь для последующей обработки. Я понимаю, что можно настроить клиент для асинхронного вызова синхронного веб-сервиса, создав операцию «invokeNonBlocking» в экземпляре «Call». (ссылка http://onjava.com/pub/a/onjava/2005/07/27/axis2.html?page=4)

Итак, мой вопрос: есть ли преимущество в использовании асинхронного веб-сервиса в этом случае? Это кажется излишним, потому что 1) клиент не заблокирован и 2) служба должна принять и записать xml в очередь независимо от того, синхронный он или асинхронный

Ответы [ 3 ]

1 голос
/ 31 января 2010

По моему мнению, асинхронный - подходящий путь. Несколько вещей для рассмотрения:

  1. У вас есть несколько клиентов, обращающихся к этой услуге в любой момент?
  2. Как часто происходит этот процесс?

Требуется немного больше усилий для реализации асинхронных методов. Но я гарантирую, в итоге вы будете намного счастливее с результатом. Во-первых, вам не нужно управлять потоками. Ваша основная проблема может заключаться в нестабильности данных в очереди (то есть в условиях гонки / тупика)

0 голосов
/ 21 января 2010

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

0 голосов
/ 21 января 2010

«Синхронный вызов» кажется подходящим, я согласен.

Если запрос от клиента не занимает много времени, то я также не вижу преимущества в том, чтобы сделать вызов асинхронным. Исходя из того, что я понимаю о рассматриваемой здесь ситуации, веб-служба выполнит свою «обработку» запроса в будущем.

Если, наоборот, для запроса требовался длительный процесс, то асинхронный вызов был бы неуместным.

...