[zeromq-dev] amqp client mode from C

Martin Sustrik sustrik at fastmq.com
Tue Jun 16 15:15:31 CEST 2009

Hi Michael,

> thanks for your swift reply.
>  > If you don't mind working with branches of both RabbitMQ and 0MQ, let 
> us know and let's give it a try.
> I don't mind working with branches, but working with unstable branches 
> from two different projects would just mean too much uncertainty. 
> Although I like the sound of that dj branch.
> Within zmq, however, I tried running a simple test using global scope 
> and it fails -- am I using the C API in the right way?
> (fails here means the bye program never receives/prints any messages) -- 
> I am using the 0.6.1 zmq release

Few minor changes are needed.

zmq_server is actually a directory service that maps symbolic names to 
IP addresses. Your config file let's the zmq_server know where are the 
individual endpoints located. You've specified it correctly:

    <node name = "rabbit_E" location = "amqp://localhost:5672"/>
    <node name = "rabbit_Q" location = "amqp://localhost:5672"/>

Once that's done, you can send messages to the AMQP server this way:


eid = zmq_create_exchange (object, "E", ZMQ_SCOPE_LOCAL, "", 
zmq_bind (object, "E", "rabbit_Q", NULL, "MyQueue");
... send a message ...


qid = zmq_create_queue (object, "Q", ZMQ_SCOPE_GLOBAL, "", ZMQ_NO_LIMIT, 
zmq_bind (object, "rabbit_E", "Q", "MyQueue", NULL);
... receive a message ...

Note following points:

1. Your client's objects are defined with ZMQ_SCOPE_LOCAL. Nobody is 
going to bind to the from outside, so there's no need to declare them as 

2. When binding to global exchange/queue you have to specify the name of 
AMQP queue ("MyQueue"). The goal is to be able to access multiple queues 
  with a single endpoint specified in the config file, however, it's 
possible to use "rabbit_Q", if no queue is explicitly specified - it's a 
trivial patch so just shout if that's what you want.


More information about the zeromq-dev mailing list