def subscribe(destination, headers = {}, subId = nil)
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
raise Stomp::Error::ProtocolErrorEmptyHeaderKey if headers.has_key?("")
raise Stomp::Error::ProtocolErrorEmptyHeaderValue if @protocol == Stomp::SPL_10 && headers.has_value?("")
headers = headers.symbolize_keys
raise Stomp::Error::DestinationRequired unless destination
headers[:destination] = destination
if @protocol >= Stomp::SPL_11
raise Stomp::Error::SubscriptionRequiredError if (headers[:id].nil? && subId.nil?)
headers[:id] = subId if headers[:id].nil?
end
_headerCheck(headers)
slog(:on_subscribe, log_params, headers)
if @reliable
subId = destination if subId.nil?
raise Stomp::Error::DuplicateSubscription if @subscriptions[subId]
@subscriptions[subId] = headers
end
transmit(Stomp::CMD_SUBSCRIBE, headers)
end