1

I'm following this example: link

So application.yml file looks like this:

spring.cloud.stream.kafka.streams.binder.configuration.commit.interval.ms: 1000
spring.cloud.stream.kafka.streams.binder.configuration:
  default.key.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
  default.value.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
spring.cloud.stream.bindings.process-out-0:
  destination: english-counts
spring.cloud.stream.bindings.process-out-1:
  destination: french-counts
spring.cloud.stream.bindings.process-out-2:
  destination: spanish-counts
spring.cloud.stream.bindings.process-in-0:
  destination: words
spring.application.name: kafka-streams-branching-sample


How can I do something like this? Even though this is not good enough for my case..

    public static class WordCountProcessorApplication {

        @Bean
        @SuppressWarnings("unchecked")
        public Function<KStream<Object, String>, KStream<?, WordCount>[]> process() {


            Predicate<Object, WordCount> isEnglish = (k, v) -> v.word.equals(bindings.process-out-0.value);
            Predicate<Object, WordCount> isFrench =  (k, v) -> v.word.equals(bindings.process-out-1.value);
            Predicate<Object, WordCount> isSpanish = (k, v) -> v.word.equals(bindings.process-out-2.value);

            return input -> input
                    .branch(isEnglish, isFrench, isSpanish);
        }
    }

Or even better: because I need this to be as dynamic as possible for my case.

    public static class WordCountProcessorApplication {

        @Bean
        @SuppressWarnings("unchecked")
        public Function<KStream<Object, String>, KStream<?, WordCount>[]> process() {


            Predicate[] isBranched = (k, v) -> v.word.equals(bindings.process-out.values);

            return input -> input
                    .branch(isBranched);
        }
    }
camel38
  • 79
  • 1
  • 10

0 Answers0