chrislovecnm
chrislovecnm

Reputation: 2621

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

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

Upvotes: 4

Views: 995

Answers (3)

lk_vc
lk_vc

Reputation: 1182

Just use C API for now:

zmq_device (ZMQ_QUEUE, clients, workers);

Upvotes: 2

Pieter Hintjens
Pieter Hintjens

Reputation: 6669

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.

Upvotes: 7

tobsen
tobsen

Reputation: 5398

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.

Upvotes: 6

Related Questions