zmq_deviced.txt 4.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
zmq_deviced(1)
==============

NAME
----
zmq_deviced - start built-in 0MQ devices

SYNOPSIS
--------

*zmq_deviced _DEVICE_ _FRONTEND_ _BACKEND_*

*zmq_deviced [_CONFIGFILE_]*

DESCRIPTION
-----------
Starts one or more 0MQ devices.  If you specify a DEVICE, FRONTEND, and BACKEND
then _zmq_device_ starts a single device acting as a mini-broker.  If you
specify a CONFIGFILE, you can configure _zmq_device_ to start multiple
concurrent devices with arbitrary configurations.

*Note* - zmq_deviced is not yet implemented.  This is a design.

MINI-BROKER USAGE
-----------------
Runs as a mini-broker that accepts connects to both frontend and backend. This
creates a hub-and-spoke topology in which all peers connect to the device. This
is a robust and easy to manage topology.

DEVICE is one of: *queue*, *forwarder*, or *streamer*. See
linkzmq:zmq_device[3] for a specification of these device types.

FRONTEND and BACKEND are endpoints in the format 'transport'`://`'address', See
linkzmq:zmq_bind[3] for a specification of valid transports and addresses.


CONFIGURED USAGE
----------------
CONFIGFILE is the name of an XML file, readable by 'zmq_device'.  This file
provides a specification of the devices to start and how to connect and/or bind
their frontends and backends.  If CONFIGFILE is absent or *-* then the
configuration is read from standard input.

The configuration file has this general syntax:

----
<?xml?>
<config [ iothreads="..." ] >
  <device type="...">
    <frontend [ type="..." ] >
        <set name = "..." value = "..." />...
        <bind endpoint="..." /> ...
        <connect address="..." /> ...
    </frontend>
    <backend [ type="..." ] >
        <set name = "..." value = "..." />...
        <bind address="..." /> ...
        <connect address="..." /> ...
    </backend>
  </device>
</config>
----

*iothreads*::
    specifies the number of I/O threads for the process.  Specify this only for
    high-volume scenarios. See linkzmq:zmq_init[3].
*device*::
    defines one device.  For each device element you define, 'zmq_device' will
    start a thread.
*frontend*::
    defines the frontend for the device.  Occurs once per device element.  You
    may override the default socket type.
*backend*::
    defines the backend for the device.  Occurs once per device element. You
may    override the default socket type.
*set*::
    defines a socket option for the frontend or backend.  The valid names are
    *hwm*, *swap*, *identity*, *subscribe*, *unsubscribe*, *rate*,
    *recovery_ivl*, *mcast_loop*, *sndbuf*, and *rcvbuf*. See
    linkzmq:zmq_setsockopt[3].
*bind*::
    binds the frontend or backend to the specified endpoint.  See
    linkzmq:zmq_bind[3].
*connect*::
    binds the frontend or backend to the specified endpoint.  See
    linkzmq:zmq_connect[3].

SOCKET TYPES
------------

By default 'zmq_device' uses these socket types:

*queue* device::
    frontend is *xrep*, backend is *xreq*.
*forwarder* device::
    frontend is *sub*, backend is *pub*.
*streamer* device::
    frontend is *pull*, backend is *push*.

You can override the socket type for frontend or backend.  The valid types are:
*req*, *rep*, *xreq*, *xrep*, *sub*, *pub*, *pull*, *push*, and *pair*.  See
linkzmq:zmq_socket[3].

*Note*: if you use a *sub* socket you must explicitly set a subscription filter
or your socket will not receive any data.


EXAMPLE
-------

.Creating a queue broker
----
zmq_device queue tcp://*:5050 tcp://*:5051
----

.A TCP-to-multicast proxy forwarder
----
zmq_device -
<?xml?>
<config>
  <device type="forwarder">
    <frontend>
        <!-- subscribe to everything -->
        <set name = "subscribe" value = "" />
        <!-- connect to two publishers -->
        <connect address="tcp://192.168.55.112:5055" />
        <connect address="tcp://192.168.55.114:5055" />
    </frontend>
    <backend>
        <!-- bind to epgm group via eth0 -->
        <bind address="epgm://eth0;239.192.1.1:5555" />
    </backend>
  </device>
</config>
----


SEE ALSO
--------
linkzmq:zmq_device[3]
linkzmq:zmq_init[3]
linkzmq:zmq_setsockopt[3]
linkzmq:zmq_bind[3]
linkzmq:zmq_connect[3]
linkzmq:zmq[7]