'NOTE: exactly one of consumer_cb/alternate_event_sink musts be non-None.
:param str consumer_tag:
:param bool no_ack: the no-ack value for the consumer
:param callable consumer_cb: The function for dispatching messages to
user, having the signature:
consumer_callback(channel, method, properties, body)
channel: BlockingChannel
method: spec.Basic.Deliver
properties: spec.BasicProperties
body: str or unicode
:param callable alternate_event_sink: if specified, _ConsumerDeliveryEvt
and _ConsumerCancellationEvt objects will be diverted to this
callback instead of being deposited in the channel\'s
`_pending_events` container. Signature:
alternate_event_sink(evt)'

def __init__(self, consumer_tag, no_ack, consumer_cb=None, alternate_event_sink=None):

    assert ((consumer_cb is None) != (alternate_event_sink is None)), ('exactly    one    of    consumer_cb/alternate_event_sink    must    be    non-None', consumer_cb, alternate_event_sink)
    self.consumer_tag = consumer_tag
    self.no_ack = no_ack
    self.consumer_cb = consumer_cb
    self.alternate_event_sink = alternate_event_sink
    self.state = self.SETTING_UP
