Как я могу расширить аннотацию spring-kafka '@KafkaListener' для создания моей собственной аннотации с ограниченными атрибутами? - PullRequest
0 голосов
/ 08 мая 2020

Я использовал @KafkaListener на уровне метода для создания потребителей. Теперь я пытаюсь создать свою собственную аннотацию, расширив '@KafkaListener' и ограничив количество атрибутов (например, по некоторым причинам я не хочу раскрывать такие атрибуты, как 'errorHandler' 'containerGroup' et c). Теперь мой вопрос: есть ли возможность расширить существующий @KafkaListener, чтобы реализовать это? Пожалуйста, предложите.

1 Ответ

1 голос
/ 08 мая 2020

Да, это довольно просто.

@SpringBootApplication
public class So61684460Application {

    public static void main(String[] args) {
        SpringApplication.run(So61684460Application.class, args);
    }

    @MyListener(topics = "so61684460", id = "so61684460")
    public void listen(String in) {
        System.out.println(in);
    }

    @Bean
    public NewTopic topic() {
        return TopicBuilder.name("so61684460").partitions(3).replicas(1).build();
    }

}

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@KafkaListener(concurrency = "${my.concurrency}")
@interface MyListener {

    @AliasFor(annotation = KafkaListener.class, attribute = "id")
    String id();

    @AliasFor(annotation = KafkaListener.class, attribute = "topics")
    String[] topics() default "";

}

Как видите, помимо ограничения видимости некоторых атрибутов, вы можете сделать их обязательными (id выше), изменить значение по умолчанию, или установить жестко заданные или параметризованные значения в невидимых атрибутах (concurrency выше).

Это описано в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...