首页 > 解决方案 > 单个微服务中是否可以有多个流?

问题描述

单个微服务中可能有多个流吗?

这是我的 yaml。

 bindings:
    input:
       destination: topic1
       content-type: application/*+avro
    output:
       destination: topic2
       content-type: application/*+avro

我可以有更多的输入和输出吗?

我可以为每个流设置不同的序列化类吗?

producer-properties:
  key.serializer: io.confluent.kafka.serializers.KafkaAvroSerializer
  value.serializer: io.confluent.kafka.serializers.KafkaAvroSerializer

标签: springapache-kafkaapache-kafka-streamsspring-cloud-stream

解决方案


是的,只需添加新的绑定:

      bindings:
        input:
          destination: topic1
          content-type: application/*+avro
        inputStream1:
          destination: topic_input_1
        inputStream2:
          destination: topic_input_2

        output:
          destination: topic2
          content-type: application/*+avro

        output2:
          destination: output_topic_2

并提供 EnableBinding 和其他额外的注解,如 StreamListener:

    @EnableBinding(MultipleDesBinding.class)
    public class YourApplication {


        @StreamListener
        @SendTo("output")
        public KStream<String, String> topology1(@Input("inputStream") KStream<String, String> inputKStream,
                                                 @Input("inputStream1") KStream<String, String> inputStream1KStream) {

        }

        @StreamListener
        @SendTo("output2")
        public KStream<String, Long> topology2(@Input("inputStream2") KStream<String, String> inputStream2KStream) {

        }
    }


    interface MultipleDesBinding {

        @Input("input")
        KStream<?, ?> input();

        @Input("inputStream1")
        KStream<?, ?> inputStream1();

        @Input("inputStream2")
        KStream<?, ?> inputStream2();

        @Output("output")
        KStream<?, ?> output();

        @Output("output2")
        KStream<?, ?> output2();

    }

您可以在文档中详细查看:命令式编程模型


推荐阅读