[zeromq-dev] exchange id issue.

Martin Sustrik sustrik at fastmq.com
Wed Mar 18 18:03:22 CET 2009


Hi Alexandre,

> I found what may be a defect in the exchange id attribution.
> 
> This is my use case:
> - the main thread of my program create an api_thread_t and use it to 
> create a process scope exchange.
> - a spawned thread create an api_thread_t and use it to create a thread 
> scope exchange.
> 
> Both exchange have the same exchange_id, therefore, I can't use the 
> process scope exchange from my spawned thread (message are delivered 
> through the thread scope exchange). As exchanges are passed to 
> api_thread_id::send() by exchange id, should they not have different id?

No. The idea is that you can used object you've created only from that 
particular thread (this is needed because internally, exchanges and 
queues are represented as ultra-efficient lock-free queues that can be 
accessed only by a single thread at a moment.)

If what you need is a "shared queue", i.e. an object that can be written 
to by many applications and from which many applications can fetch data, 
you should create a simple application that does the thing. Have a look 
at chat example. The "chatroom" component is actually a shared queue.

In most cases the code boils down to something like this:

int eid = api->create_exchange ("E");
api->create_queue ("Q");

while (true) {
     message_t message;
     api->receiver (&message);
     api->send (eid, message);
}

At some time in the future we'll ship pre-packaged shared queue 
implementation with 0MQ, however, at the moment you have to write 
something like the code above yourself.

Hope this helps.
Martin




More information about the zeromq-dev mailing list