[rabbitmq-discuss] problems updating to new client library

Simon MacMullen simon at rabbitmq.com
Fri Oct 14 11:25:55 BST 2011

Hi Max.

On 13/10/11 18:17, Max Warnock wrote:
> I've just swapped out the whole amqp_client infrastructure in my erlang
> application to the latest release. It looks like there were significant
> changes to the infrastructure but the api remains almost identical (the
> network vs direct connection being the only exception I've found).  But
> now I'm getting an error in code that used to work about my
> subscription.  My code looks like this:
> %% Queue is a binary name, Listener is a PID and State is a dictionary
> containing various things including the channel PID
> subscribe(Queue,Listener,State) ->
>      Sub = #'basic.consume'{queue = Queue},
>      #'basic.consume_ok'{consumer_tag = Tag} =
> amqp_channel:subscribe(State:fetch(amqp_channel_pid), Sub, Listener),
>      {ok, Tag}.
> This worked with the previous version of the library and I don't see any
> difference in the docs
> (http://www.rabbitmq.com/erlang-client-user-guide.html)

It should work the same.

> now it produces the following error:
>   {{function_clause,

So it looks like amqp_selective_consumer is getting into a state where 
it thinks your consumer (which should be a pid) is the atom 'hipaa'. 
This is just what gets passed in to the third argument of 
amqp_channel:subscribe/3. Unfortunately nothing enforces this until we 
get a consume_ok back from the server. Are you sure you are passing in a 
pid there?

> There is a clause in the new docs that explains the difference between
> the selective consumer and the direct consumer. Based on that
> description it seems like everything used to be a direct consumer and
> that's what I should be using,

No, it used to be a selective consumer and that's what I should be using 
(if you don't want to change anything). Selective is the default.

Cheers, Simon

Simon MacMullen
RabbitMQ, VMware

More information about the rabbitmq-discuss mailing list