春季云流-为给定的PollableMessageSource自动装配基础使用者

时间:2019-07-19 11:35:12

标签: spring-kafka spring-cloud-stream

是否有可能为已定义的PollableMessageSource保留基础的KafkaConsumer bean?

我将Binding定义为:

public interface TestBindings {

    String TEST_SOURCE =  "test";

    @Input(TEST_SOURCE)
    PollableMessageSource testTopic();
}

和配置类:

@EnableBinding(TestBindings.class)
public class TestBindingsPoller {
    @Bean
    public ApplicationRunner testPoller(PollableMessageSource testTopic) {
        // Get kafka consumer for PollableMessageSource
        KafkaConsumer kafkaConsumer = getConsumer(testTopic);
        return args -> {
            while (true) {
                if (!testTopic.poll(...) {
                    Thread.sleep(500);
                }
            }
        };
    }
}

问题是,如何获得对应于testTopic的KafkaConsumer?有什么方法可以从在春季云流中连接的bean中获得它?

1 个答案:

答案 0 :(得分:1)

KafkaMessageSourceKafkaConsumer填充到标题中,因此可以在接收消息的地方使用:https://github.com/spring-projects/spring-kafka/blob/master/spring-kafka/src/main/java/org/springframework/kafka/support/converter/MessageConverter.java#L57

如果您要自己做poll之类的事情,我建议您注入ConsumerFactory并从那里使用一个消费者。