Est-il possible avec Spring Kafka de lire deux sujets différents chez différents consommateurs dans un ordre garanti ? Par exemple, la rubrique A stocke des informations pertinentes pour déterminer comment gérer les données stockées dans la rubrique B. La rubrique A est lue en mémoire et référencée, mais doit être complètement renseignée avant de lire les données à partir de la rubrique B. Vous trouverez ci-dessous un exemple de ce à quoi ressemble ma configuration actuelle...

@Service
public class TopicA {
  @KafkaListener(topics = "topicA")
  public void consume(ConsumerRecord<String, byte[]> record) {
    // ... some code here to populate an in-memory data structure
  }
}
@Service
public class TopicB {
  @KafkaListener(topics = "topicB")
  public void consume(ConsumerRecord<String, byte[]> record) {
    // ... some code here that depends on topic A having populated the in-memory data structure
  }
}

Jusqu'à présent, je me suis penché sur la création d'un processus de démarrage Spring (à l'aide de @PostConstruct) qui initialise la structure de données en lisant d'abord le sujet A, mais je n'ai pas réussi à le faire fonctionner. Est-ce que quelqu'un a des suggestions? Merci d'avance!

0
Brandon 22 janv. 2020 à 04:13

1 réponse

Meilleure réponse
@KafkaListener(id = "bConsumer" topics = "topicB", autoStartup = "false")

Ensuite, câblez automatiquement le haricot KafkaListenerEndpointRegistry et registry.getListenerContainer("bConsumer").start(); lorsque vous êtes prêt.

0
Gary Russell 22 janv. 2020 à 03:33