使用"条件参数标题"时出错@StreamListener新版本Chelsea.RC1

时间:2017-03-20 17:33:30

标签: spring-cloud spring-cloud-stream spring-kafka

我正在尝试使用事件过滤器来减少应用程序使用的主题数量,使用新版Spring云流(Chelsea.RC1)中提供的新功能。正在使用正确的标头创建消息,但是,检查队列中消息的内容,消息不包含标头,只包含带有效负载的主体。

public void sendEnroll(EnrollCommand data) {

    //MessageChannel
    outputEnroll.send(MessageBuilder
            .withPayload(data)
                .setHeader("brand", "MASTERCARD")
                .setHeader("operation", Operation.ENROLL).build());
}

消费

@Service
@EnableBinding(Channel.class)
public class EnrollConsumer {

@Autowired
private EnrollService service;

@StreamListener(target = Channel.INPUT_ENROLL, condition = "headers['brand']=='MASTERCARD'")
public void enrollConsumer(@Payload String command){
    System.out.println(command);
    //service.enrollment(command);
 }
}

在消费者服务中,它会发出以下警告:

WARN -kafka-listener-1 o.s.c.s.b.DispatchingStreamListenerMessageHandler:62 - Cannot find a @StreamListener matching for message with id: 7baae934-7484-a7fd-91b0-ba906558bb13

1 个答案:

答案 0 :(得分:3)

您必须映射您的自定义标题:

spring.cloud.stream.kafka.binder.headers = brand,operation

该信息出现在documentation