[zeromq-dev] clrzmq - sending kill request to other threads

Seif Attar iam at seifattar.net
Sun Feb 26 00:23:14 CET 2012


Hello,

I am trying to write a logger for NHibernate that will pulish log
messages with 0mq, each logger might be used from a different thread.

The way I implemented this is by started a running thread with a PULL
inproc socket that will get the messages from the logger and publish
them using tcp.

Each of the loggers creates a push socket that sends messages to the
sink running in the main publisher thread.

This works ok, only problem I am having is that I can't dispose of the
objects properly, I need a way to send a kill signal to the loggers
before terminating the context. I looked at how this should be done,
and it would appear that I need to  have a controller in the main
thread that sends the kill signal to another socket on the logger
(something along the lines of http://zguide.zeromq.org/cs:tasksink2
and http://zguide.zeromq.org/cs:taskwork2). However, this means that
the loggers will block the caller, which won't work.

Any recommendations on how to go about this? The code is on github:

The class that holds the main thread is:

https://github.com/seif/NHibernate.ZMQLogPublisher/blob/master/src/NHibernate.ZMQLogPublisher/Publisher.cs

and the logger:

https://github.com/seif/NHibernate.ZMQLogPublisher/blob/master/src/NHibernate.ZMQLogPublisher/ZmqLogger.cs

This is the Logger factory which Nhibernate calls into, nothing 0MQ
specific in here:

https://github.com/seif/NHibernate.ZMQLogPublisher/blob/master/src/NHibernate.ZMQLogPublisher/ZmqLoggerFactory.cs

I had tried opening a new Socket in each ZMQLogger.Publish call, but
that caused an exception (Too many files open), understandble, so I am
back at  having to send the kill signal.

Any help appreciated.

Thanks,
Seif



More information about the zeromq-dev mailing list