Primavera KafkaTestUtils: attendere il messaggio in argomento sarebbe consumato

0

Domanda

Così, ho affrontato la situazione interessante:

Nel mio test di integrazione invio i dati per 2 argomenti, e devono essere consumati dall'applicazione da parte dell'ordine. In un primo momento - userTopic, quindi dovrebbe essere consumato userOrderTopic.

Quando invio i miei messaggi in prova, invia davvero rapidamente, allo stesso tempo. Ma a volte, l'ordine del consumando applicazione è diverso. (userOrder argomento, quindi userTopic) che rompe il mio test a tutti.

Ho trovato alcuni triks, come avrei potuto evitarlo - thread sonno, etc. Ma credo che sia una pessima soluzione.

Eccomi di nuovo con kafka, come risultato con KafkaTestUtils. C'è qualche metodo, che può verificare che il messaggio in argomento è stata consumata/controllare fino a che il messaggio è stato consumato?

Qualcosa di simile a questo:

//check that message in userTopic was consumed, to have a chance send message to userOrderTopic 
KafkaTestUtils.waitUntilBeConsumed(serverBootstrap, "user-consumer", topic, 0, messageToUserTopic)

o

KafkaTestUtils.getNowConsumedMessage(serverBootstrap, "user-consumer", topic, 0)

P. S. nel mio integrazione di prova non ho accesso al produttore/consumatore.

O forse in primavera.kafka e la primavera.kafka.test sono altro strumenti per farlo in modo corretto?

1

Migliore risposta

0

KafkaTestUtils è solo per l'utilizzo da test di consumatori non è una vera e propria applicazione dei consumatori.

Non è di facile soluzione per questa condizione di competizione; è necessario attendere per il primo record per essere consumato prima di inviare il secondo.

2021-11-23 21:03:32

Così, c'è qualche modo per verificare che il messaggio è stato cosumed? Che appare come un filo.il sonno non è una cattiva idea
Gary Russell

Ci sono un paio di tecniche diverse, per esempio - se il vostro ascoltatore chiamate di servizio, aggiungere un finto/stub del servizio nei test e aspettare di essere chiamati; - aggiungere un RecordInterceptor per l'ascoltatore contenitore di fabbrica nel caso di prova e attendere che l'intercettore di essere chiamato; - aggiungere un proxy intorno all'ascoltatore che conta un dispositivo di chiusura in caso di prova - vedere stackoverflow.com/questions/53678801/... per un esempio.

grazie per la spiegazione

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................