在我想要缓存的应用程序之间具有带有入站http网关和出站http网关的spring集成应用程序,以避免不必要的请求。我唯一的解决方案是在将缓存的结果路由回回复通道后再添加带有高速缓存和路由器的拦截器,并且不将其缓存到出站,但是这种解决方案对我而言似乎很棘手和丑陋。当入站网关具有相同的请求和答复通道时(当返回具有相同报头但有效负载不同的新消息时,带有缓存的拦截器也可以很好地工作,它被视为答复),但我不能使用这种情况。
还有更好的主意吗?
更优雅的解决方案可以实现<request-handler-advice-chain>
和春天缓存建议。
因此,您的解决方案可能是这样的:
<int-http:outbound-gateway>
<int-http:request-handler-advice-chain>
<cache:advice>
<cache:caching cache="foo">
<cache:cacheable method="handle*Message" key="#a0.payload"/>
</cache:caching>
</cache:advice>
</int-http:request-handler-advice-chain>
</int-http:outbound-gateway>
哪里handle*Message
的handleRequestMessage
方法HttpRequestExecutingMessageHandler
。正是针对这种方法,Spring Integration运用了他的建议(例如RequestHandlerRetryAdvice
)。
在这里,您应该配置一个cacheManager
bean,选择高速缓存名称并key
为高速缓存条目确定一个。上面的示例中#a0
是一个Message
来自handleRequestMessage
参数的对象。因此,您可以针对消息属性(有效负载和标头)指定任何SpEL表达式。的结果handleRequestMessage
将存储在缓存中。
当您为HTTP reqeust提供相同的参数时,结果将仅从缓存中返回。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句