如何在@StreamListener

时间:2019-02-01 16:08:30

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

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

活页夹配置为content-type ='application / json',所以我想可以在有效负载上添加条件。

我的要求是仅在字段的日期早于now()时获取元素。当此条件为真时,将消耗所有其他元素。

示例,我希望像这样:

@StreamListener(value = INPUT, condition = "data.startDate > now()")
public void onMessage(@Payload Data data) { 
    // ...
}

第一个问题是我收到错误消息:EL1008E:在类型为'byte []'的对象上找不到属性或字段'startDate'-可能不是公共的或无效的吗?

2 个答案:

答案 0 :(得分:1)

这是正确的,因为有效负载不会转换为任何类型,并且以其原始格式byte[]存在。请参阅this section专门的“条件中的内容类型协商” 子部分。

但是,对于您的情况,您可以简单地将表达式修改为new String(payload)....之类,知道它在转换前总是byte[]

答案 1 :(得分:0)

我认为答案在文档中,并且与奥列格的答案相符

  

这是因为您正在测试的内容尚不存在   陈述你所期望的。那是因为消息的有效载荷不是   尚未从有线格式(byte [])转换为所需的类型。在   换句话说,它还没有经过类型转换过程   第10章,内容类型协商中进行了介绍。

     

因此,除非您使用SPeL表达式来评估原始数据(对于   例如,字节数组中第一个字节的值),使用消息   基于标头的表达式(例如condition =   “ headers ['type'] =='dog'”)。