org.apache.activemq.transport.InactivityIOException: Cannot send, channel has already failed
that looks like a race between normal close and an IOException on the connection, that is causing a failure.
Just before the call to close, the transport fails and the call to close fails with an exception because it has already failed and it cannot submit the normal close information to the broker.
Because the connection has failed, the broker will already be aware of the close.
The exception could be improved to include the original failure exception in the cause, that should be in the log a little earlier but could also be in the cause of this exception.
Maybe raise a jira issue to track that, it is an easy fix to include the original failure cause.