Pub-Sub Tracing (Espresso Pattern)
Letâs start this chapter by looking at a way to trace pub-sub networks. In Chapter 2 we saw a simple proxy that used these to do transport
bridging. The
zmq_proxy()
method has three arguments: a
frontend and backend socket that it bridges
together, and a capture socket to which it will send all messages.
The code is deceptively simple, as you can see in Example 5-1.
Example 5-1. Espresso pattern (espresso.c)
//
// Espresso pattern
// This shows how to capture data using a pub-sub proxy
//
#include "czmq.h"
// The subscriber thread requests messages starting with
// A and B, then reads and counts incoming messages.
static
void
subscriber_thread
(
void
*
args
,
zctx_t
*
ctx
,
void
*
pipe
)
{
// Subscribe to "A" and "B"
void
*
subscriber
=
zsocket_new
(
ctx
,
ZMQ_SUB
);
zsocket_connect
(
subscriber
,
"tcp://localhost:6001"
);
zsockopt_set_subscribe
(
subscriber
,
"A"
);
zsockopt_set_subscribe
(
subscriber
,
"B"
);
int
count
=
0
;
while
(
count
<
5
)
{
char
*
string
=
zstr_recv
(
subscriber
);
if
(
!
string
)
break
;
// Interrupted
free
(
string
);
count
++
;
}
zsocket_destroy
(
ctx
,
subscriber
);
}
The publisher sends random messages starting with AâJ, as seen in Example 5-2.
Example 5-2. Espresso pattern (espresso.c): publisher thread
static
void
publisher_thread
(
void
*
args
,
zctx_t
*
ctx
,
void
*
pipe
)
{
void
*
publisher
=
zsocket_new
(
ctx
,
ZMQ_PUB
);
zsocket_bind
(
publisher
,
"tcp://*:6000"
);
while
(
!
zctx_interrupted
)
{
char
string
[
10
];
sprintf
(
string
,
"%c-%05d"
,
randof
(
10
)
+
Get ZeroMQ now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.