0
votes

I am trying to use the Content-based routing in the latest version of the Spring Cloud stream. As per this document -> Content-based routing, it mentions how to use it in the legacy system/StreamListener.

This is my code with StreamListener

@StreamListener(target = EventChannels.FILE_REQUEST_IN
            , condition = "headers['saga_request']=='FILE_SUBMIT'")
public void handleSubmitFile(@Payload FileSubmitRequest request) {
        
}

@StreamListener(target = EventChannels.FILE_REQUEST_IN
            , condition = "headers['saga_request']=='FILE_CANCEL'")
public void handleCancelFile(@Payload FileCancelRequest request) {
        
}

By using the condition, it was possible to route the message to two different functions.

I am trying to consume the message with a Functional interface approach as below.

    @Bean
    public Consumer<String> consumeMessage(){
        return event -> {
            try {
                LOGGER.info("Consumer is working: {}", event);
            } catch (Exception ex) {
                LOGGER.error("Exception while processing");
            }
        };
    }

How can I achieve similar content-based routing in the functions? TIA.

Other details->

  1. Spring boot version - 2.3.12.RELEASE
  2. Spring cloud version - Hoxton.SR11