All Projects → mpenet → Tape

mpenet / Tape

Chronicle Queue helpers

Programming Languages

clojure
4091 projects

Labels

Projects that are alternatives of or similar to Tape

Queue classic
Simple, efficient worker queue for Ruby & PostgreSQL.
Stars: ✭ 1,175 (+949.11%)
Mutual labels:  queue
Data Structures
This repository contains some data structures implementation in C programming language. I wrote the tutorial posts about these data structures on my personal blog site in Bengali language. If you know Bengali then visit my site
Stars: ✭ 82 (-26.79%)
Mutual labels:  queue
Php Fpm Queue
Use php-fpm as a simple built-in async queue
Stars: ✭ 103 (-8.04%)
Mutual labels:  queue
Traffic Shm
traffic-shm (Anna) is a Java based lock free IPC library.
Stars: ✭ 72 (-35.71%)
Mutual labels:  queue
Audioplayermanager
⚠️ No longer maintained ⚠️ Small Swift Wrapper and Queue-Manager around AVPlayer which let you play MediaPlayer items and stream songs from URLs.
Stars: ✭ 78 (-30.36%)
Mutual labels:  queue
Rabbitevents
Nuwber's events provide a simple observer implementation, allowing you to listen for various events that occur in your current and another application. For example, if you need to react to some event published from another API.
Stars: ✭ 84 (-25%)
Mutual labels:  queue
Bokeh
Bokeh is a simple, scalable and blazing-fast task queue built on Node.js and ZeroMQ.
Stars: ✭ 67 (-40.18%)
Mutual labels:  queue
Rageframe2
一个基于Yii2高级框架的快速开发应用引擎
Stars: ✭ 1,553 (+1286.61%)
Mutual labels:  queue
Exq
Job processing library for Elixir - compatible with Resque / Sidekiq
Stars: ✭ 1,218 (+987.5%)
Mutual labels:  queue
Foundatio
Pluggable foundation blocks for building distributed apps.
Stars: ✭ 1,365 (+1118.75%)
Mutual labels:  queue
Distube
A Discord.js v12 module to simplify your music commands and play songs with audio filters on Discord without any API key. Support YouTube, SoundCloud, Bandcamp, Facebook, and 700+ more sites
Stars: ✭ 73 (-34.82%)
Mutual labels:  queue
Miniqueue
A simple, single binary, message queue.
Stars: ✭ 77 (-31.25%)
Mutual labels:  queue
App
Spiral Framework Skeleton HTTP Application: Queue, Console, Cycle ORM
Stars: ✭ 90 (-19.64%)
Mutual labels:  queue
Laravel Queue Rabbitmq
RabbitMQ driver for Laravel Queue. Supports Laravel Horizon.
Stars: ✭ 1,175 (+949.11%)
Mutual labels:  queue
Loafer
Asynchronous message dispatcher - Currently using asyncio and amazon SQS
Stars: ✭ 104 (-7.14%)
Mutual labels:  queue
Shuttle.esb
A highly extensible service bus implementation.
Stars: ✭ 71 (-36.61%)
Mutual labels:  queue
Resque
Resque is a Redis-backed Ruby library for creating background jobs, placing them on multiple queues, and processing them later.
Stars: ✭ 9,031 (+7963.39%)
Mutual labels:  queue
P Queue
Promise queue with concurrency control
Stars: ✭ 1,863 (+1563.39%)
Mutual labels:  queue
Buckets Swift
Swift Collection Data Structures Library
Stars: ✭ 106 (-5.36%)
Mutual labels:  queue
Adidas Multi Session
(Python) Program to simulate multiple sessions on adidas queue pages.
Stars: ✭ 90 (-19.64%)
Mutual labels:  queue

tape

cljdoc badge Clojars Project

Simple Chronicle Queue 5 helpers for clojure.

Micro second messaging that stores everything to disk

In short for when Kafka is too much and durable-queue not enough.

Chronicle Queue is similar to a low latency broker-less durable/persisted JVM topic. Tape focuses on embedded usage (we do not support topic distribution). It's essentially a disk-backed queue, allowing for queues that can survive processes dying, and whose size is bounded by available disk rather than memory.

Conceptually the api is somewhat similar to kafka, you can replay queues, set tailer's index etc... It stores everything on flat-files, you can control how rollup/purge of these happens via queue options.

I'd encourage you read about Chronicle Queue if you want to use this lib, Chronicle Queue comes with its set of tradeoffs you want to know first.

Started with a fork of https://github.com/malesch/croque and ended up rewriting/dropping most of it, hence the rename.

Installation

tape is available on Clojars.

Usage

(ns foo
  (:require [qbits.tape.tailer :as tailer]
            [qbits.tape.appender :as appender]
            [qbits.tape.queue :as queue]))

;; create a queue instance
(def q (queue/make "/tmp/q1"))

;; create a tailer bound to that queue
(def t (tailer/make q))

;; nothing in queue yet, so nil
(tailer/read! t) => nil

;; to add to queue you need an appender
(def appender (appender/make q))

;; add stuff to queue, returns index
(appender/write! appender {:foo [:bar {:baz 0}]}) => 76759655514210
(appender/write! appender {:another :thing}) => 76759655514211

(tailer/read! t) => {:foo [:bar {:baz 0}]}
(tailer/read! t) => {:another :thing}
(tailer/read! t) => nil ;; empty now


;; back to some existing index, essentially rewinding to it
(tailer/to-index! t 76759655514210)

;; Tailers are also Sequential/Seqable/Reducible and behave as such.

(run! (fn [msg] (println msg)) t)

(doseq [msg t]
  (println msg))

[...]

There's also a core.async facade for appenders/tailers on qbits.tape.async and other utilities to cleanup queues files you don't care about anymore. Anything created with a make function can be inspected with clojure.datafy/datafy.

We serialize data with fressian as a default, but you can supply your own qbits.tape/ICodec when you make/bind to a queue if you need to use something else.

License

Copyright © 2019 Max Penet

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].