2013-09-09 4 views
1

У меня есть следующая архитектура в моей тестовой лаборатории:Как разработать/собрать кэш SOAP в JAVA

  • ˝n˝ клиентам мыловарения запросы к различным веб-служб (я не могу контролировать на стороне клиента технологии, но запрос всегда SOAP XML через HTTP);

  • 1 шлюз, который обслуживает все входящие запросы SOAP, маршрутизируя их в соответствующие WS.

Проблема:

Мои услуги получают сотни (иногда тысячи) запросов в день. Многие из них - это запросы GET, которые собирают только информацию. Таким образом, многие из этих запросов схожи, с единственными отличиями являются:

  • 1 контрольное поле в заголовке Soap Env \ Header, которое идентифицирует каждый запрос (идентификатор запроса).
  • 1 поле управления в Soap-Env \ Body, которое идентифицирует временную метку создания запроса.

Решение:

Внедрение механизма кэширования в шлюзе. Когда запрос на WS XPTO будет получен в шлюзе, механизм кэширования будет сравнивать его с кэшированным запросом для этого WS, а если они равны, кэшированный ответ возвращается клиенту, избегая запроса WS-адреса назначения.

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

Требования:

  • Использование JAVA для реализации;
  • Мне нужно поддерживать только один кешированный запрос/ответ для каждого WS;
  • Бэкэнд должен быть очень быстрым в времени отклика/записи;
  • Сравнение XML-SOAP-запросов должно выполняться с помощью бэкэнд, так как я не могу их последовательно извлекать и делать сравнение в JAVA ради производительности, очевидно.

Вопросы:

Учитывая это подробное описание (извините за его длины), я хотел бы ухо от экспертов Wich технологий будет лучше всего подходит для моих потребностей, специально для внутреннего интерфейса. Я рассмотрел NoSQL и хранилища ключей для хранения в памяти, но я не уверен, что один из них будет отвечать всем моим потребностям.

  • Должен ли я хранить XML в правильном поле строки БД, а затем сделать простой запрос WHERE?
  • Должен ли я преобразовать XML-запрос в документ JSON, сохранить его в базе данных NoSQL и продолжить запрос и сравнить запросы таким образом?
  • Должен ли я выбирать систему базы данных в памяти, сохраняя ее как: (service_name, [request_XML, response_XML])?

ответ

1

Вы исследовали EHCache и есть конкретный пример из ibm также может помочь вам

Также подумайте о кэшировании на clientside