public ResponseMessageFuture unsubscribe(ResponseListener...listeners) {
UnsubscribeMessage unsubscribeMessage = new UnsubscribeMessage(destination, topic, subscriptionId);
unsubscribeMessage.getHeaders().putAll(defaultHeaders);
final Consumer consumer = this;
ResponseListener listener = new ResultIssuesResponseListener() {
@Override
public void onResult(ResultEvent event) {
channel.removeConsumer(consumer);
subscriptionId = null;
}
@Override
public void onIssue(IssueEvent event) {
log.error("Unsubscription failed %s: %s", consumer, event);
}
};
if (listeners == null || listeners.length == 0)
listeners = new ResponseListener[]{listener};
else {
ResponseListener[] tmp = new ResponseListener[listeners.length + 1];
System.arraycopy(listeners, 0, tmp, 0, listeners.length);
tmp[listeners.length] = listener;
listeners = tmp;
}
return channel.send(unsubscribeMessage, listeners);
}