То, как я делал это в прошлом, следует шаблону «билет» или «квитанция».Служба REST принимает запросы на ресурс (имя отчета, znode и т. Д.) И возвращает тикет.Этот билет (обычно UUID или что-то подобное) может использоваться для представления сеанса.Последующие запросы используют этот тикет для проверки статуса их запросов.Для обеспечения правильного истечения срока действия билетов происходит один из двух случаев;Вы можете тайм-аут билеты или, после получения результата, клиент должен предоставить ACK (подтверждение) обратно к услуге.
ex.
Запрос: GET / zookeeper / znode / ephemeral /foo Ответ: 1234-1234-1234-1234
Запрос: GET / zookeeper / status / 1234-1234-1234-1234 Ответ: РАБОТАЮЩИЙ (или НЕ ДОСТУПЕН, или ЗАБЛОКИРОВАН, НЕТГОДНО или НЕ УДАЛЕН ...)
Запрос: GET / zookeeper / status / 1234-1234-1234-1234 Ответ: ПРИОБРЕТЕН (или ДОСТУПЕН, или ОК, или УСПЕХ, или какое-либо значение (я) ...)
Запрос: GET / zookeeper /Подтверждение / 1234-1234-1234-1234 Ответ: ОК (или НЕИЗВЕСТНЫЙ БИЛЕТ и т. д.)
Интересные сообщения об управляемости:
Запрос: GET / zookeeper / session (или / tickets) Ответ:[1234, 5668, ...]
Запрос: GET / zookeeper / kill / Response: OK (или UNKNOWN или FAILED ...)
Это сработало очень и очень хорошо.Это означает, однако, что служба REST находится в состоянии, что усложняет балансировку нагрузки.Я использовал протокол, который гарантирует, что идентификатор сервера возвращается при каждом ответе, и если клиент получает другой идентификатор сервера и НЕИЗВЕСТНЫЙ билет, вы предполагаете, что служба, с которой вы разговаривали, умерла и начала работу заново.Это подразумевает липкую балансировку нагрузки (то есть циклический перебор не будет работать здесь).Служба REST должна быть многопоточной, чтобы поддерживать выполнение этих запросов параллельно и обеспечивать доступ к базе данных заявок (обычно в памяти, структуре данных хэш-таблицы синхронизации), а также к потоку тайм-аута сеанса / билета.
Надеюсь, это поможет.