2017-03-20 1 views
1

J'essaie d'utiliser le filtre d'événements pour réduire la quantité de sujets que l'application utilise en utilisant la nouvelle fonctionnalité disponible dans la nouvelle version du flux de nuages ​​de printemps (Chelsea.RC1). Le message est en cours de création, avec l'en-tête correct, mais inspectant le contenu du message dans la file d'attente, le message ne contient pas l'en-tête, seul le corps avec la charge utile.Erreur lors de l'utilisation de "condition paramter header" @StreamListener de la nouvelle version Chelsea.RC1

public void sendEnroll(EnrollCommand data) { 

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

Consumer

@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); 
} 
} 

En service à la clientèle, il donne l'avertissement suivant:

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 

Répondre

1

Vous devez mapper vos en-têtes personnalisés:

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

Cette information est présent dans le documentation.

+0

Ty Artem, son fonctionnement, désolé pour mon tort. –

+0

Super! Vérifiez ceci, s'il vous plaît: http://stackoverflow.com/help/someone-answers –