Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

zeromq 3.1 C++ API 'device' is not a member of 'zmq'

Tags:

c++

zeromq

I am noticing that device is not part of the 3.0 api ... what do I use instead?

zmq::device (ZMQ_QUEUE, clients, workers);

I found that the devices have been moved to here: https://github.com/zeromq/libzfl

like image 421
chrislovecnm Avatar asked Dec 09 '22 00:12

chrislovecnm


2 Answers

It's a little confused, so here's the story.

When I inherited maintenance of 0MQ/2.x, it had a zmq_device() function, and a set of external device apps, small main programs with XML configuration.

I'd previously tried to improve and document these two layers, which people were playing with, patches refused by the maintainers. We then moved the external apps to the zdevices project, with more flexible configuration, etc. In the end these got no adoption and were abandoned. zdevices used libzfl (and XML) for its configuration. Most of libzfl got refactored into the CZMQ API (which people do use, a lot).

Sustrik then decided to remove the zmq_device call from 0MQ/3.0, which I explained the the list with the "less is more" argument. People didn't really like this since it broke a lot of existing applications, for a fairly weak reason.

So after the XS fork, I patched zmq_device back into 0MQ/3.1. The C++ API isn't part of the core library, but anyone using it is welcome to patch a device method back into that.

HTH.

like image 108
Pieter Hintjens Avatar answered Dec 30 '22 18:12

Pieter Hintjens


AFAIK, currently there no devices available for 3.x but according to the readme

Less is More

Pre-built devices and zmq_device() removed. Should be made available as a separate project(s).

Exactly one year ago, pieterh wrote the following on the site about the reasons for removing the devices:

It's mostly about being able to improve the device layers independently from the libzmq core. It's been hard to improve these device layers as part of libzmq core, mainly because the core API is considered sacred in ways that other stuff isn't. I.e. one does not touch a core API except between major versions. So, one does not touch devices if they are part of the core, except between major versions.

like image 42
tobsen Avatar answered Dec 30 '22 19:12

tobsen