2015-01-08 1 views
1

В одном из проектов Spring, над которым я работаю, есть класс, аннотированный с помощью @Endpoint, и методы аннотируются с помощью @PayloadRoot. Мне кажется, что он работает таким образом, что запросы обрабатываются синхронно, и следующий запрос не будет обрабатываться до тех пор, пока не будет возвращен ответ на более ранний запрос.@Endpoint аннотированный класс обрабатывает запросы от нескольких клиентов, может ли он быть асинхронным?

Как мы можем улучшить производительность в сценарии, в котором есть запросы, поступающие от нескольких клиентов?

спасибо, Джон

+0

Почему вы считаете, что запросы обрабатываются синхронно? – shazin

+0

спасибо шазин. Это не то, что я думаю - так оно кодируется: например, один из методов класса Endpoint принимает запрос и использует его для извлечения данных из БД для формирования ответа, весь процесс блокируется до получения ответа. Файл журнала подтвердил, что новый запрос не возвращается до предыдущего ответа. –

ответ

2

Каждый @Endpoint класса находятся в области видимости, как синглтон и может обрабатывать запросы, поступающие от нескольких клиентов, так что каждый из них имеет один поток.

Проверить Отметка в http://docs.spring.io/spring-ws/site/reference/html/server.html:

Endpoints, как и любой другой Spring Bean, находятся в области видимости как одноточечного по умолчанию, то есть один экземпляр определения фасоли создается за контейнер. Будучи одиночным, подразумевается, что более чем один поток может использовать в то же время, поэтому конечная точка должна быть потокобезопасной. Если вы используете , используйте другую область действия, например, прототип, см. Весенний Справочная документация.

Обратите внимание, что все абстрактные базовые классы, представленные в Spring-WS, являются потоком безопасным, если не указано иное в Javadoc класса.

+0

Спасибо, Патрик. Я прочитал документ. Будет ли это помогать, если я буду использовать Endpoint для прототипа? Будет ли он потерять безопасность потока? Можем ли мы узнать, сколько экземпляров будет создано контейнером Spring? Если запрос приходит, все экземпляры Endpoint обрабатывают его или только один из них делает? Транспорт в этом проекте представляет собой JMS. Извините за все вопросы, любая помощь приветствуется ... –