我的测试实验室有以下架构:
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/