WHAT IS ZEROMQ?
not an MQ!
networking and concurrency library
asynchronous messaging
routing/topology aware
brokerless
high performance
multiple transports
cross-platform
numerous bindings (client libs)
LGPL licensed
Slide 5
Slide 5 text
DESIGN AND IMPLEMENTATION
Slide 6
Slide 6 text
NO BROKER
Slide 7
Slide 7 text
CONVENTIONAL SOCKETS (TCP/UDP)
Slide 8
Slide 8 text
ZEROMQ SOCKETS
Slide 9
Slide 9 text
MESSAGES
Asynchronous
Atomic
Multipart
Slide 10
Slide 10 text
PERFORMANCE
Low latency, high throughput
Zero-copy, reference counted
Batching
Configurable through socket options
RabbitMQ: 4500 msg/s -> ZeroMQ: 250,000 msg/s
apples to oranges (but similar use case with transient messages)
Slide 11
Slide 11 text
ZEROMQ API
Objects: context, socket, message
Flow: create context > bind/connect > send/receive
# s
e
r
v
e
r p
r
o
c
e
s
s
c
o
n
t
e
x
t = z
m
q
.
C
o
n
t
e
x
t
(
1
)
s
o
c
k
e
t = c
o
n
t
e
x
t
.
s
o
c
k
e
t
(
z
m
q
.
P
U
B
)
s
o
c
k
e
t
.
b
i
n
d
(
"
t
c
p
:
/
/
*
:
5
5
5
6
"
)
s
o
c
k
e
t
.
s
e
n
d
(
"
s
o
m
e e
v
e
n
t
"
)
# c
l
i
e
n
t p
r
o
c
e
s
s
c
o
n
t
e
x
t = z
m
q
.
C
o
n
t
e
x
t
(
)
s
o
c
k
e
t = c
o
n
t
e
x
t
.
s
o
c
k
e
t
(
z
m
q
.
S
U
B
)
s
o
c
k
e
t
.
c
o
n
n
e
c
t
(
"
t
c
p
:
/
/
s
e
r
v
e
r
:
5
5
5
6
"
)
e
v
e
n
t
_
d
a
t
a = s
o
c
k
e
t
.
r
e
c
v
(
)
Slide 12
Slide 12 text
NOT IN THE BOX
Serialization
Compression
Security
...
Slide 13
Slide 13 text
TRANSPORTS
Slide 14
Slide 14 text
TRANSPORTS
# s
e
r
v
e
r p
r
o
c
e
s
s
c
o
n
t
e
x
t = z
m
q
.
C
o
n
t
e
x
t
(
1
)
s
o
c
k
e
t = c
o
n
t
e
x
t
.
s
o
c
k
e
t
(
z
m
q
.
P
U
B
)
# s
o
c
k
e
t
.
b
i
n
d
(
"
t
c
p
:
/
/
*
:
5
5
5
6
"
)
s
o
c
k
e
t
.
b
i
n
d
(
"
i
p
c
:
/
/
/
t
m
p
/
f
e
e
d
s
/
0
"
)
s
o
c
k
e
t
.
s
e
n
d
(
"
s
o
m
e e
v
e
n
t
"
)
# c
l
i
e
n
t p
r
o
c
e
s
s
c
o
n
t
e
x
t = z
m
q
.
C
o
n
t
e
x
t
(
)
s
o
c
k
e
t = c
o
n
t
e
x
t
.
s
o
c
k
e
t
(
z
m
q
.
S
U
B
)
# s
o
c
k
e
t
.
c
o
n
n
e
c
t
(
"
t
c
p
:
/
/
l
o
c
a
l
h
o
s
t
:
5
5
5
6
"
)
s
o
c
k
e
t
.
c
o
n
n
e
c
t
(
"
i
p
c
:
/
/
/
t
m
p
/
f
e
e
d
s
/
0
"
)
e
v
e
n
t
_
d
a
t
a = s
o
c
k
e
t
.
r
e
c
v
(
)
Slide 15
Slide 15 text
COMMUNICATION PATTERNS
Slide 16
Slide 16 text
PATTERN: PUBLISH-SUBSCRIBE
Slide 17
Slide 17 text
PATTERN: PUBLISH-SUBSCRIBE
Sockets: PUB/SUB
SUB can subscribe to specific topic or all messages
PATTERN: CLIENT-SERVER
Sockets: REQ/REP
c
o
n
t
e
x
t = z
m
q
.
C
o
n
t
e
x
t
(
1
)
s
o
c
k
e
t = c
o
n
t
e
x
t
.
s
o
c
k
e
t
(
z
m
q
.
R
E
Q
)
s
o
c
k
e
t
.
c
o
n
n
e
c
t
(
"
t
c
p
:
/
/
l
o
c
a
l
h
o
s
t
:
5
5
5
6
"
)
s
o
c
k
e
t
.
s
e
n
d
(
"
s
o
m
e e
v
e
n
t
"
)
r
e
p
l
y = s
o
c
k
e
t
.
r
e
c
v
(
) # b
l
o
c
k
s