Spring integration spring xd定制redis接收器

Spring integration spring xd定制redis接收器,spring-integration,spring-xd,spring-data-redis,Spring Integration,Spring Xd,Spring Data Redis,因此,我认为我需要扩展SpringXD中提供的当前redis接收器,以写入redis封顶列表,而不是创建一个新的列表,但不幸的是,它似乎变得更糟,因为我将不得不深入spring集成,并进一步回到spring数据(SpringDataRedis)因为整个redis接收器似乎基于redis上的通用发布/订阅抽象——或者消息到达通道处理程序后是否有某种类型的处理程序可以定义 为了在推送数据redis时获得“封顶列表的效果”,我需要执行redis“推送”,然后执行“rtrim”,如下所述-。如果我要构建

因此,我认为我需要扩展SpringXD中提供的当前redis接收器,以写入redis封顶列表,而不是创建一个新的列表,但不幸的是,它似乎变得更糟,因为我将不得不深入spring集成,并进一步回到spring数据(SpringDataRedis)因为整个redis接收器似乎基于redis上的通用发布/订阅抽象——或者消息到达通道处理程序后是否有某种类型的处理程序可以定义

为了在推送数据redis时获得“封顶列表的效果”,我需要执行redis“推送”,然后执行“rtrim”,如下所述-。如果我要构建一个定制的spring集成/spring数据模块。我相信我在这里看到了对“ltrim”的支持,而不是对“rtrim”操作的支持


如有任何关于如何/从何处开始或更简单方法的建议,将不胜感激

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

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

我认为您应该使用
,并在其配置中添加类似的内容:

<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列表中最旧的元素。

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

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

我认为您应该使用
,并在其配置中添加类似的内容:

<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列表中最旧的元素。

对不起,你说得对,我的Ls和Rs混淆了。让我试试你的建议。这正是我想要避免重写自定义出站通道适配器的类型。我总是忘记如何/何时使用SPEL表达式。我将按照这里的说明部署它,所以当我查看源代码时,我会看到默认的redis操作是“左推”和?这是完全不同的故事。该组件完全适用于类似队列的行为。虽然我们也可以在那里做同样的
ltrim
,但我不会从架构的角度考虑问题。lpush集合1 lpush集合2 lpush集合3 lpush集合4 lpush集合5 lrange集合0-1 1)“5”2)“4”3)“3”4)“2”5)“1”我想删除最旧的元素,在本例中是“1”或者第五个元素,而不是最新的元素。ltrim命令的工作方式似乎很难做到这一点。我可以用
ltrim集合0-2
删除最旧的元素,但这不允许我构建保持集合最大任意大小的元素。因此我认为我确实需要指定RedisQueueOutboundChannelAdapter使用rpush命令而不是lpush,然后执行ltrim命令,使redisTemplate spel看起来像#redisTemplate.boundListOps(${keyExpression}).trim(0,5)以保留最新的5个元素。对的如果是这样,我如何更改RedisQueueOutboundChannelAdapter中的默认leftPush标志并覆盖提供的redis:sink以使用它?很抱歉,你是对的,我的Ls和Rs混淆了。让我试试你的建议。这正是我想要避免重写自定义出站通道适配器的类型。我总是忘记如何/何时使用SPEL表达式。我将按照这里的说明部署它,所以当我查看源代码时,我会看到默认的redis操作是“左推”和?这是完全不同的故事。该组件完全适用于类似队列的行为。虽然我们也可以在那里做同样的
ltrim
,但我不会从架构的角度考虑问题。lpush集合1 lpush集合2 lpush集合3 lpush集合4 lpush集合5 lrange集合0-1 1)“5”2)“4”3)“3”4)“2”5)“1”我想删除最旧的元素,在本例中是“1”或者第五个元素,而不是最新的元素。ltrim命令的工作方式似乎很难做到这一点。我可以用
ltrim集合0-2
删除最旧的元素,但这不允许我构建保持集合最大任意大小的元素。因此我认为我确实需要指定RedisQueueOutboundChannelAdapter使用rpush命令而不是lpush,然后执行ltrim命令,使redisTemplate spel看起来像#redisTemplate.boundListOps(${keyExpression}).trim(0,5)以保留最新的5个元素。对的如果是,如何更改RedisQueueOutboundChannelAdapter中的默认leftPush标志,并覆盖提供的redis:sink以使用它?