1

我的基于 Java 的 Web 应用程序正在与远程 WSDL Web 服务交互。

我构造了一个特定于服务的 WSDL 请求。我使用 HTTP 客户端发出此 WSDL 请求,并返回 WSDL 响应。

由于我的情况可以接受,为了优化性能和带宽使用,我想缓存 WSDL 响应,以便下次我发出相同的请求时,我的 Web 应用程序可以直接从持久数据库加载响应。

有了JAXB.marshalJAXB.unmarshal我可以得到序列化 XML 格式和“Java 对象表示”的响应表示。所以我有了建立一个数据库来保存编组的 XML 表示的想法。但在我的例子中,典型响应的 XML 文件表示很容易达到 200 KB。正如我们对 XML 文件所了解的那样,这个大小在很大程度上与 XML 的冗长有关,并且可能会大大减少以优化数据库容量使用和数据库读写速度。

是否有缓存和持久化 WSDL 响应的有效方法?也就是说,我正在寻找一种为函数实现映射的好方法 f(someWSDLRequest) -> someWSDLResponse

4

1 回答 1

2

要缓存,您需要一个键和一个值。在这种情况下,显然值是来自 SOAP 服务的响应。

对于关键,为什么不尝试将参数连接成一个字符串(我以前见过很多次)或者对请求进行 MD5 散列。它使缓存键小而简单,如果请求相同,它将始终相同。

当一个请求进来并且你在缓存中有响应时,提供它。

如果不存在,则从数据库中获取,放入缓存中,然后提供服务。

如果底层对象发生变化(缓存的响应),则使缓存无效,或者只是在其上设置一个过期时间,让它随着时间的推移而发生。

于 2013-02-03T02:02:02.533 回答