spring-xd自定义redis-sink

时间:2016-03-20 16:39:02

标签: spring-integration spring-xd spring-data-redis

所以我认为我需要扩展spring-xd中提供的当前redis-sink写入redis Capped列表,而不是创建一个新的但不幸的是它似乎变得更糟,因为我将不得不深入到春天-integration并进一步回到spring-data(spring-data-redis),因为整个redis-sink似乎是基于redis上的泛型pub / sub抽象 - 或者是否有一些类型的处理程序可以在消息后定义到达渠道处理程序?

为了在推送数据redis时获得“上限列表的效果”,我需要执行redis“push”和“rtrim”,如此处所述 - http://redis.io/topics/data-types-intro。如果我要构建一个自定义弹簧集成/弹簧数据模块。我相信我看到支持“ltrim”但不支持“rtrim”操作http://docs.spring.io/spring-data/redis/docs/1.7.0.RC1/api/

任何有关如何/在何处开始或更简单方法的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

实际上即使Redis也没有这样的RTRIM command。我们不需要它,因为我们与LTRIM的负面索引达到了相同的行为:

  

开始和结束也可以是负数,表示列表末尾的偏移量,其中-1是列表的最后一个元素,-2是倒数第二个元素,依此类推。

我认为您应该使用<redis:store-outbound-channel-adapter>并在其配置中添加类似内容:

<int-redis:request-handler-advice-chain>
    <beans:bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
        <beans:property name="onSuccessExpression" value="#redisTemplate.boundListOps(${keyExpression}).trim(1, -1)"/>
    </beans:bean>
</int-redis:request-handler-advice-chain>

删除Redis列表中最旧的元素。