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

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

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


person Jack BeNimble    schedule 20.01.2010    source источник


Ответы (3)


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

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

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

person IAbstract    schedule 31.01.2010

Согласен, уместным кажется "синхронный вызов".

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

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

person jldupont    schedule 20.01.2010

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

person Jack BeNimble    schedule 21.01.2010