[zeromq-dev] Event-driven publish-subscribe model

Chuck Remes lists at chuckremes.com
Mon Mar 26 17:42:46 CEST 2012


On Mar 26, 2012, at 10:24 AM, Rajalakshmi Iyer wrote:

> Hello,
> 
> I understand I have to use zmq_poll which is essentially event-driven. So that solves problem (1) and (3). However, I still need some comments on point (2) below.
> 
> Thanks!
> 
> On 26 March 2012 12:52, Rajalakshmi Iyer <raj at blismobile.com> wrote:
> Hello, 
> 
> I am working on a requirement whereby a process (say producer) needs to send out one-way messages to a variable number of processes (say consumers).
> 
> The publish-subscribe model seemed good for this because the consumers will subscribe to messages from the producer. I tried using ZeroMQ to achieve this.
> 
> However, I have a few problems with it:
> 
> The consumers have to continuously poll for messages. I would have the consumers to be notified when there is a new message.
> 
> There is a possibility of the producer queue being filled up. I would have liked the producer to remove messages from the queue based on some condition (say remove messages older than 5 seconds, or remove messages that have been read 5 times). I see ZMQ recommends using a HWM, but I would like more selective removal of elements from the buffer.
> 
> Since the consumers are polling and the messages are not removed from the queue, the consumers see duplicate messages till a new message comes in. I want the consumer to be notified only once per new message.
> 
> I understand I may be using a wrong model (publish-subscribe may not be suitable). I have thought about using request-reply, but that doesn't work since the producer does not want to keep track of the number of consumers.
> 
> Can anyone suggest a good alternative?
> 

Raj,

I recommend that you read this posting:  http://unprotocols.org/blog:15

That is a far better mechanism than the built-in HWM mechanism. Since it isn't built in to the library, you would have to add this logic at the application level. Since it *requires* two-way communication between the client and server, you cannot use the PUB/SUB sockets. You would need to use DEALER/ROUTER sockets to handle this communication.

Yes, this will be a little more work but it is necessary for the kind of flexibility that your #2 issue requires.

I hope this helps.

cr

PS - we would *love* it if someone made a patch to libzmq that added credit-based flow control as an option for all socket types.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20120326/fa1f6e51/attachment.htm>


More information about the zeromq-dev mailing list