I have published the message asynchronously to the exchange.&nbsp; Now to consume the messages from the exchange, I can use either BasicGet or BasicConsume.&nbsp; When you are consuming messages in pub/sub model, do you have to specify what exchange to look for?&nbsp; In addition, when you consume message from an exchange regardless of messaging model(pub/sub), you still have to declare a queue, bind it and consume the message from the queue?<br>

<br>BasicConsume and BasicGet there is a variable named queue = Q. In pub-sub case, how do you define null queue in Erlang-client? In basic.consume I set the queue = &lt;&lt;&quot;&quot;&gt;&gt; like below:<br><br>BasicConsume = #&#39;basic.consume&#39;{ticket = Ticket,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queue = &lt;&lt;&quot;&quot;&gt;&gt;,<br><br>In basic.publish, I set immediate = false so that when the consumer started later, message will be in the queue for it to consume.<br>
<br>Rabbitmq server throwing errors when I run the consumer code after the message have been published to the exchange.<br><br>(rabbit@home)5&gt; amqp_async_consume:amqp_lifecycle_consume(). <br>Connection: {&lt;0.178.0&gt;,direct}<br>

** exception exit: {{amqp_async_consume,amqp_lifecycle_consume,0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {line,40},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; match,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [{&#39;queue.declare_ok&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;&quot;amq.q.gen1_rabbit@home_20080409224223_&quot;&gt;&gt;,0,0}]}<br>

&nbsp;&nbsp;&nbsp;&nbsp; in function&nbsp; amqp_async_consume:amqp_lifecycle_consume/0<br><br><br>This is the line causing the problem: amqp_channel:call(Channel,QueueDeclare) in<br>#&#39;queue.declare_ok&#39;{queue = Q,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message_count = MessageCount,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consumer_count = ConsumerCount}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = amqp_channel:call(Channel,QueueDeclare),<br><br><br>-module(amqp_async_consume).<br><br>-include_lib(&quot;rabbitmq_server/include/rabbit_framing.hrl&quot;).<br>

-include_lib(&quot;rabbitmq_server/include/rabbit.hrl&quot;).<br>-include_lib(&quot;rabbitmq_client/include/amqp_client.hrl&quot;).<br><br>-export([amqp_lifecycle_consume/0]).<br><br>amqp_lifecycle_consume() -&gt;<br>&nbsp;&nbsp;&nbsp; User = Password = &quot;guest&quot;,<br>

&nbsp;&nbsp;&nbsp; Realm = &lt;&lt;&quot;/data&quot;&gt;&gt;,<br><br>&nbsp;&nbsp;&nbsp; %% Start a connection to the server<br><br>&nbsp;&nbsp;&nbsp; Connection = amqp_connection:start(User, Password),<br>&nbsp;&nbsp;&nbsp; io:format(&quot;Connection: ~p~n&quot;,[Connection]),<br>

&nbsp;&nbsp;&nbsp; %% Once you have a connection to the server, you can start an AMQP channel gain access to a realm<br><br>&nbsp;&nbsp;&nbsp; Channel = amqp_connection:open_channel(Connection),<br>&nbsp;&nbsp;&nbsp; Access = #&#39;access.request&#39;{realm = Realm,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exclusive = false,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passive = true,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; active = true,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write = true,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read = true},<br>

&nbsp;&nbsp;&nbsp; #&#39;access.request_ok&#39;{ticket = Ticket} = amqp_channel:call(Channel, Access),<br><br>&nbsp;&nbsp;&nbsp; %% Register a consumer to listen to a queue<br>&nbsp;&nbsp;&nbsp; Q = &lt;&lt;&quot;&quot;&gt;&gt;,&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; X = &lt;&lt;&quot;x&quot;&gt;&gt;,<br>

&nbsp;&nbsp;&nbsp; BindKey = &lt;&lt;&quot;a.b.c.*&quot;&gt;&gt;,<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; QueueDeclare = #&#39;queue.declare&#39;{ticket = Ticket, queue = Q,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passive = false, durable = false,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exclusive = false, auto_delete = false,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nowait = false, arguments = []},<br>&nbsp;&nbsp;&nbsp; #&#39;queue.declare_ok&#39;{queue = Q,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message_count = MessageCount,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consumer_count = ConsumerCount}<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = amqp_channel:call(Channel,QueueDeclare),<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; %ExchangeDeclare = #&#39;exchange.declare&#39;{ticket = Ticket, exchange = X, type = &lt;&lt;&quot;topic&quot;&gt;&gt;,<br>&nbsp;&nbsp;&nbsp; %&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passive = false, durable = false, auto_delete = false, internal = false,<br>

&nbsp;&nbsp;&nbsp; %&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nowait = false, arguments = []},<br>&nbsp;&nbsp;&nbsp; %#&#39;exchange.declare_ok&#39;{} = amqp_channel:call(Channel, ExchangeDeclare),<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; QueueBind = #&#39;queue.bind&#39;{ticket = Ticket, queue = Q, exchange = X,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; routing_key = BindKey, nowait = false, arguments = []},<br>&nbsp;&nbsp;&nbsp; #&#39;queue.bind_ok&#39;{} = amqp_channel:call(Channel, QueueBind),<br><br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; %ConsumerTag = &lt;&lt;&quot;&quot;&gt;&gt;,<br>

&nbsp;&nbsp;&nbsp; %DeliveryTag = &lt;&lt;&quot;&quot;&gt;&gt;,<br>&nbsp;&nbsp;&nbsp; BasicConsume = #&#39;basic.consume&#39;{ticket = Ticket,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queue = Q,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consumer_tag = &lt;&lt;&quot;&quot;&gt;&gt;,<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_local = false,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no_ack = true,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exclusive = false,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nowait = false},<br>

&nbsp;&nbsp;&nbsp; #&#39;basic.consume_ok&#39;{consumer_tag = ConsumerTag} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = amqp_channel:call(Channel, BasicConsume, self()),<br><br>&nbsp;&nbsp;&nbsp; %% If the registration was sucessful, then consumer will be notified<br><br>&nbsp;&nbsp;&nbsp; receive<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&#39;basic.consume_ok&#39;{consumer_tag = ConsumerTag} -&gt; ok<br>&nbsp;&nbsp;&nbsp; end,<br><br>&nbsp;&nbsp;&nbsp; %% When a message is routed to the queue, it will then be delivered to this consumer<br><br>&nbsp;&nbsp;&nbsp; receive<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {#&#39;basic.deliver&#39;{delivery_tag = DeliveryTag}, Content} -&gt;<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #content{payload_fragments_rev = [Payload]} = Content,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; io:format(&quot;Message received: ~p~n&quot;, [Payload])<br>&nbsp;&nbsp;&nbsp; after 2000 -&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(did_not_receive_message)<br>&nbsp;&nbsp;&nbsp; end,<br><br>

&nbsp;&nbsp;&nbsp; %% After the consumer is finished interacting with the queue, it can deregister itself<br><br>&nbsp;&nbsp;&nbsp; BasicCancel = #&#39;basic.cancel&#39;{consumer_tag = ConsumerTag,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nowait = false},<br>

&nbsp;&nbsp;&nbsp; #&#39;basic.cancel_ok&#39;{consumer_tag = ConsumerTag} = amqp_channel:call(Channel,BasicCancel).<br><br>Thank you,<br>Joe<br>