This implements the publish-subscribe pattern as a set of commands (esq-server, esq-tail, esq-write, esq-drop). A client application may directly access esq-server (esq-tail, esq-write, esq-drop are just that).
Topics are stored forever, using lmdb.
Async I/O is done through libev.
$ make
$ ./esq-server
$ ./esq-tail topic_a
$ ./esq-tail -n -10 topic_a
(w/ last 10 events)
$ ./esq-tail -n +0 topic_a
(from start)
$ echo "hello" | ./esq-write topic_a
$ ./esq-write topic_a < data.ndjson
$ ./esq-tail topic_a | jq .foo | ./esq-write topic_b
$ ./esq-drop topic_b
$ make test
$ ./esq-bench
- freebsd tailq
- libev
- lmdb
- lz4
- tinycthread
- munit for tests
- code cleanup
- client library
- esq-drop