使用此基本配置:
<int-redis:store-inbound-channel-adapter id="listAdapter"
connection-factory="redisConnectionFactory"
key="messages"
channel="redisChannel"
collection-type="LIST"
>
<int:poller fixed-rate="2000" />
</int-redis:store-inbound-channel-adapter>
读取并放入redisChannel的消息也保留在Redis中。有没有办法同时从Redis读取和删除消息并使用此配置将它们放入redisChannel? 我可以使用调度程序手动执行并执行我需要的redis命令,但这感觉就像是对Spring集成进行攻击。
答案 0 :(得分:1)
<int-redis:store-inbound-channel-adapter>
返回RedisStore
个对象。在您的情况下,它是List
实现。因此,当您需要时,可以简单地调用remove()
或clear()
List
方法。
使用Transaction Synchronization Factory的另一种方法,但我不确定它对您有何帮助,因为您可以在<splitter>
之后使用<int-redis:store-inbound-channel-adapter>
。但是,您应该在分割器之前将RedisStore
放置到标头。
<强>更新强>
根据您的上一条评论:
<int:service-activator input-channel="redisChannel">
<int-groovy:script>
def data = [] + payload
payload.clear()
data
</int-groovy:script>
</int:service-activator>
就我们的有效负载是RedisStoreList
而言,我们可以简单地将其复制到另一个列表clear()
并返回该新列表。 clear()
操作将委托给Redis。