java - 如何在 JAVA 中开发/组装 SOAP 缓存

标签 java xml web-services caching soap

我的测试实验室有以下架构:

  • N 个 SOAP 客户端向不同的 Web 服务发出请求(我无法控制客户端技术,但请求始终是通过 HTTP 的 SOAP XML);

  • 1 个网关,为所有传入的 SOAP 请求提供服务,将它们路由到正确的 WS。

问题:

我的服务每天收到数百(有时数千)个请求。其中许多是 GET 请求,仅收集信息。因此,其中许多请求都是相似的,唯一的区别是:

  • Soap-Env\Header 中的 1 个控制字段,用于标识每个请求(请求 ID)。
  • Soap-Env\Body 中的 1 个控制字段,用于标识请求创建的时间戳。

解决方案:

在网关中实现缓存机制。当网关收到对 WS XPTO 的请求时,缓存机制会将其与该 WS 的缓存请求进行比较,如果相等,则将缓存的响应返回给客户端,从而避免查询目标 WS。

我正在考虑在将其存储在缓存后端之前从 XML 请求字符串中删除 2 个请求控制属性。在将每个传入请求与缓存的请求进行比较之前,我可以对每个传入请求执行相同的操作。

要求:

  • 使用JAVA实现;
  • 我只需要为每个 WS 维护一个缓存的请求/响应;
  • 后端的读/写响应时间必须非常快;
  • XML SOAP 请求的比较必须由后端处理,因为显然出于性能考虑,我无法顺序检索它们并在 JAVA 中进行比较。

问题:

鉴于此详细描述(抱歉其长度),我想听听专家的意见哪些技术最适合我的需求,特别是后端。我考虑过 NoSQL 和内存键值存储,但我不能确信其中之一能够满足我的所有需求。

  • 我应该将 XML 存储在常规字符串数据库字段中,然后进行简单的 WHERE 查询吗?
  • 我是否应该将 XML 请求转换为 JSON 文档,将其存储在 NoSQL DB 中,并以这种方式进一步查询和比较请求?
  • 我是否应该选择内存数据库系统,将条目存储为: (服务名称,[request_XML,response_XML])

最佳答案

你探索过EHCache吗? ibm 有一个具体的例子也可能对你有帮助

还要考虑缓存 clientside

关于java - 如何在 JAVA 中开发/组装 SOAP 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696806/

相关文章:

java - 如何制作可重定位的rpm?

java - Java客户端连接后C服务器崩溃

xml - 两个大列表的高效映射

perl - 如何通过 OTRS 中的 Web 服务(SOAP 或 REST)将配置项链接/获取到工单

Python 泡沫错误 "' NoneType' 对象没有属性 'promotePrefixes'“

java - 使用 FasterXML Jackson 将字符串转换为整数

java - Java 中的功能区和自定义按钮

java - 如何使用 ximpleware 获取 XML 中的内部数组子元素

python - 可以告诉 ElementTree 保留属性的顺序吗?

java - Java 的 WS-Discovery 实现