我们在我们的解决方案中使用了由消息存储支持的delayer,如果某些spel表达式条件为真,则将消息的延迟时间设置为15分钟。 但是如果应用程序服务器在中间重新启动,则延迟器成为解决方案的诅咒,并且所有消息都没有从延迟器恢复,并且它变成悬空情况。 请建议。 代码:
<int:delayer id="mydelayer" input-channel="DelayerOutputChannel"
output-channel="letChannel" default-delay="1000"
expression="payload.comm.code == 'ABC' ? #{eodConfigMap['ABC']} :( payload.comm.code == 'DEF' ? #{eodConfigMap['DEF']} : (payload.commRequest.code == 'GHI' ? #{eodConfigMap['GHI']} : #{eodConfigMap['FGH']}))"
message-store="siMessageStore" />
<util:map id="eodConfigMap" key-type="java.lang.String"
value-type="java.lang.String" scope="singleton" map-class="java.util.HashMap">
<entry key="FDG" value="1000"/>
<entry key="ABC" value="1000"/>
<entry key="DEF" value="1000"/>
<entry key="GHI" value="1000"/>
</util:map>
<int-jdbc:message-store id="siMessageStore" data-source="jndiDataSource" region="DEF_DELAY"
table-prefix="MY_TABLE_SIDELAY"/>
此致 拉姆