Spring集成应用程序和缓存

 妩媚天天想我 发布于 2023-02-08 14:22

具有入站http网关和出站http网关的Spring集成应用程序,在我想拥有缓存之间,以避免不必要的请求.我唯一的解决方案是添加拦截器缓存和路由器后,它将cahced结果路由回到回复通道,并且非缓存到出站,但这个解决方案对我来说似乎很棘手和丑陋.当入站网关具有相同的请求和回复通道时,具有缓存的拦截器也很有效(当返回具有相同标头但具有不同有效负载的新消息时,它被视为回复)但不是我可以使用的情况.

对此更好的想法?

1 个回答
  • 使用<request-handler-advice-chain> 和Spring Cache Advice可以实现更优雅的解决方案.

    所以,你的解决方案可能是这样的:

    <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*MessagehandleRequestMessage的方法HttpRequestExecutingMessageHandler.正是对于这种方法,Spring Integration应用了他的建议(例如RequestHandlerRetryAdvice).

    在这里,您应该配置cacheManagerbean,选择缓存名称并确定key缓存条目.上面的示例#a0是参数中的Message对象handleRequestMessage.因此,您可以针对消息属性(有效负载和标头)指定任何SpEL表达式.并将结果handleRequestMessage存储在缓存中.

    当您为HTTP reqeust提供相同的参数时,结果将仅从缓存返回.

    2023-02-08 14:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有