Thanks for follow-up Siam. I thought I could get away with using POLL_OUT but alas, no luck.
Is there any reason why the pending messages are destroyed? On Thu, May 23, 2013 at 7:58 AM, Siam Rafiee <[email protected]> wrote: > This behaviour actually affects my system too (looks like we're modeling > failovers in the same way), so I followed this up on the #zeromq irc > channel, where guido_g helped clarify why this is happening. > > [For those more familiar with Java-style syntax, I've reproduced the code > here http://pastebin.com/BD6kL20g ]. > > A zmq socket maintains a separate queue for each connected peer. When you > disconnect the PUSH socket from localhost:12345, that queue is destroyed > (along with any messages pending on it). When the PUSH socket is then > connected to the new endpoint, a new (empty) queue is created. Thus, only > "msg9" (which is sent after this queue is created) will be delivered when > the PULL side eventually binds at the new endpoint. > > Cheers, > > Siam > > > On 22 May 2013 23:58, Apostolis Xekoukoulotakis <[email protected]>wrote: > >> Sorry, wrong answer. >> >> >> 2013/5/23 Apostolis Xekoukoulotakis <[email protected]> >> >>> You are probably disconnecting push before it is able to send the msgs. >>> >>> >>> 2013/5/23 Trevor Bernard <[email protected]> >>> >>>> I'm using libzmq 3.2.3 >>>> >>>> >>>> >>>> On Wed, May 22, 2013 at 12:05 PM, Trevor Bernard < >>>> [email protected]> wrote: >>>> >>>>> What should the functionality be for the following scenario? >>>>> >>>>> ;; Conceptually, assume push and pull sockets are different processes >>>>> (def ctx (zcontext 1)) >>>>> (def ctx2 (zcontext 2)) >>>>> >>>>> (def push (-> (socket ctx :push) >>>>> (connect "tcp://localhost:12345"))) >>>>> (send push (.getBytes "msg1")) ;; true >>>>> (send push (.getBytes "msg2")) ;; true >>>>> >>>>> >>>>> (def pull (-> (socket ctx2 :pull) >>>>> (bind "tcp://*:12345"))) >>>>> >>>>> ;; receive queued messages as expected >>>>> (String. (recv pull)) "msg1" >>>>> (String. (recv pull)) "msg2" >>>>> (close pull) ;; simulate loss of connection >>>>> >>>>> (send push (.getBytes "msg3")) >>>>> (send push (.getBytes "msg4")) >>>>> (send push (.getBytes "msg5")) >>>>> >>>>> (def pull2 (-> (socket ctx2 :pull) >>>>> (bind "tcp://*:12345"))) >>>>> >>>>> ;; Again, received queued messages >>>>> (String. (recv pull2)) ;; "msg3" >>>>> (String. (recv pull2)) ;; "msg4" >>>>> (String. (recv pull2)) ;; "msg5" >>>>> (close pull2) >>>>> >>>>> (send push (.getBytes "msg6")) ;; true >>>>> (send push (.getBytes "msg7")) ;; true >>>>> (send push (.getBytes "msg8")) ;; true >>>>> >>>>> ;; Simulate failover to a new endpoint >>>>> (disconnect push "tcp://localhost:12345") >>>>> (connect push "tcp://localhost:1337") >>>>> >>>>> (send push (.getBytes "msg9")) ;; true >>>>> (def pull3 (-> (socket ctx2 :pull) >>>>> (bind "tcp://*:1337"))) >>>>> >>>>> ;; Expected to receive msg6-9 >>>>> (String. (recv pull3)) ;; "msg9" >>>>> >>>>> I expected the messages to be queued up and to receive msg6..9 but >>>>> only received msg9. Are messages 6-8 lost? >>>>> >>>>> -Trev >>>>> >>>> >>>> >>>> _______________________________________________ >>>> zeromq-dev mailing list >>>> [email protected] >>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev >>>> >>>> >>> >>> >>> -- >>> >>> >>> Sincerely yours, >>> >>> Apostolis Xekoukoulotakis >>> >>> >> >> >> -- >> >> >> Sincerely yours, >> >> Apostolis Xekoukoulotakis >> >> >> _______________________________________________ >> zeromq-dev mailing list >> [email protected] >> http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> >> > > _______________________________________________ > zeromq-dev mailing list > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > >
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
