è il problema del publisher/subscriver: un unico canale, se non ha letto non puoi andare a scrivere.
Il problema è che qui non è semplicissimo bloccare il canale.
Allora penserei (così su due piedi) di fare una cosa:

1. richiesta scrittura servlet, completata con l'invio al client
2. client riceve roba, termina con richiesta nuova scrittura

e via dicendo.
Porre in attesa il servlet significa porre un blocco di non si sa quanto tempo su una risorsa remota (può non arrivarti ack, il client può bloccarsi e restare appeso all'infinito), quindi una nuova richiesta mi sembra una gestione leggermente migliore (anche se hai un leggero spreco di banda, ma puoi supporre che l'ack si anche la nuova richiesta).

In questo modo semplifichi anche il codice perché hai una sola cosa da gestire per ogni richiesta, non devi porre niente in attesa.
Ricorda però che la servlet non si mette in attesa, semplicemente termina.
Nell'ottica dell'uso di questo meccanismo cerca anche di ottimizzare le operazioni di inizializzazione della servlet (in modo da risparmiare tempo)