【问题标题】:How to add SpEL condition for dates in @StreamListener如何在@StreamListener 中为日期添加 SpEL 条件
【发布时间】:2019-06-26 13:02:06
【问题描述】:

我能够通过 Kafka 或 RabbitMQ 发送消息并使用 @StreamListener 使用它们。

我现在想跳过一个标头不符合日期条件的邮件。

例如,我希望是这样的:

@StreamListener(value = INPUT, condition = "headers['startDate'] < now()")
public void onMessage(@Payload Data data) { 
    // I process only messages where header "startDate" is before now
}

有可能吗?

【问题讨论】:

    标签: spring-boot spring-cloud spring-cloud-stream spring-el


    【解决方案1】:

    这完全取决于标头包含的内容。

    假设它包含以毫秒为单位的时间,请使用:

    headers['startDate'] < new java.util.Date().time
    

    【讨论】:

    • 谢谢加里。我试过了,但效果不好。我的消息在启动时很好用。但是,如果我使用相同的规则发布另一条消息,我会收到错误消息“找不到与 id:1234 消息匹配的@StreamListener”
    • 如果条件返回 false,将产生该消息。
    • 这意味着消息不再被重新处理?事实上,当日期条件不是 True 时,我想跳过该消息。但是使用流可能是不可能的。
    • 使用condition 时,如果没有@StreamListener 满足条件,则丢弃消息。您需要在侦听器中使用自定义代码来执行您想要的操作 - 您还必须小心不要将线程挂起时间超过 kafka max.poll.interval.ms;否则 Kafka 会认为消费者已经死亡并重新平衡分区。
    猜你喜欢
    • 2019-06-26
    • 2015-03-23
    • 1970-01-01
    • 2015-07-25
    • 2012-04-07
    • 2014-02-17
    • 1970-01-01
    • 2014-07-22
    • 2023-04-02
    相关资源
    最近更新 更多