如何在每次轮询中读取和删除int-redis:store-inbound-channel-adapter消息

时间:2013-11-24 10:58:03

标签: spring spring-integration

使用此基本配置:

<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集成进行攻击。

1 个答案:

答案 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。