Listener interface for events that are run at the completion of a request/response
cycle (i.e. when the request has been completely read, and the response has been fully written).
At this point it is too late to modify the exchange further.
Implementations are required invoke
ExchangeCompletionListener.NextListener.proceed()
to allow other listeners to release
resources, even in failure scenarios. This chain allows transfer of request ownership between
listeners in order to complete using non-blocking mechanisms, and must not be used to conditionally
proceed.
Completion listeners are invoked in reverse order.