Spring Cloud Stream Kafka 2.0-有条件的StreamListener

时间:2018-07-26 14:53:02

标签: apache-kafka spring-cloud-stream

我正在尝试使用StreamListener注释和条件属性来创建使用者。但是,出现以下异常:

org.springframework.core.convert.ConversionFailedException:无法从类型[java.lang.String]转换为类型[java.lang.Integer]的值“ test”;嵌套的异常为java.lang.NumberFormatException:对于输入字符串:“ test”

TestListener:

@StreamListener(target=ITestSink.CHANNEL_NAME,condition="payload['test'] == 'test'")
public void test(@Payload TestObj message) {
    log.info("message is {}",message.getName());
}

TestObj:

@Data
@ToString(callSuper=true)
public class TestObj {

    @JsonProperty("test")
    private String test;

    @JsonProperty("name")
    private String name;

}

有人可以协助解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

根据您显示的内容,它应该可以工作。我建议您删除条件,然后将断点设置为调试。然后,您应该能够知道哪种实际类型。

答案 1 :(得分:0)

消息的有效负载尚未从有线格式(byte [])转换为所需的类型。换句话说,它尚未经过内容类型协商中描述的类型转换过程。

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

示例:

 @StreamListener(target = Sink.INPUT, condition = "headers['type']=='bogey'")
    public void receiveBogey(@Payload BogeyPojo bogeyPojo) {
       // handle the message
    }