jaytaylor / bboltqueue

bboltqueue: A Queue Structure for boltdb

Home Page:https://jaytaylor.com/bboltqueue

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

bboltqueueGoDoc

Documentation Build Status Report Card

import "jaytaylor.com/bboltqueue"

Package boltqueue provides a persistent queue or priority queue based on boltdb.

Based on boltqueue.

Priority Queue

boltqueue's PQueue type represents a priority queue. Messages may be inserted into the queue at a numeric priority between 0(highest) and 255(lowest). Messages are dequeued following priority order, then time ordering, with the oldest messages of the highest priority emerging first.

Requirements

  • Go v1.7 or newer

Usage

type Message

type Message struct {
}

Message represents a message in the priority queue

func NewMessage

func NewMessage(value string) *Message

NewMessage generates a new priority queue message

func NewMessageB

func NewMessageB(value []byte) *Message

NewMessageB generates a new priority queue message from a byte slice

func (*Message) Priority

func (m *Message) Priority() int

Priority returns the priority the message had in the queue in the range of 0-255 or -1 if the message is new.

func (*Message) ToString

func (m *Message) ToString() string

ToString outputs the string representation of the message's value

type PQueue

type PQueue struct {
}

PQueue is a priority queue backed by a Bolt database on disk

func NewPQueue

func NewPQueue(db *bolt.DB) (*PQueue, error)

NewPQueue uses an already open *bolt.DB

func NewPQueueFromFile

func NewPQueueFromFile(filename string) (*PQueue, error)

NewPQueueFromFile loads or creates a new PQueue with the given filename

func (*PQueue) Close

func (b *PQueue) Close() error

Close closes the queue and releases all resources

func (*PQueue) Dequeue

func (b *PQueue) Dequeue(topic string) (*Message, error)

Dequeue removes the oldest, highest priority message from the queue of the named topic and returns it

func (*PQueue) Enqueue

func (b *PQueue) Enqueue(topic string, priority int, message *Message) error

Enqueue adds a message to the queue filed under the specified topic

func (*PQueue) Scan

func (b *PQueue) Scan(topic string, fn func(m *Message)

Invokes the supplied callback function on each message for the named topic.

func (*PQueue) ScanWithBreak

func (b *PQueue) ScanWithBreak(topic string, fn func(m *Message)

Invokes the supplied callback function on each message for the named topic until the callback returns false.

func (*PQueue) Requeue

func (b *PQueue) Requeue(topic string, priority int, message *Message) error

Requeue adds a message back into the topic queue, keeping its precedence. If added at the same priority, it should be among the first to dequeue. If added at a different priority, it will dequeue before newer messages of that priority.

func (*PQueue) Size

func (b *PQueue) Size(topic string, priority int) (int, error)

Size returns the number of entries of a given priority from 1 to 5

About

bboltqueue: A Queue Structure for boltdb

https://jaytaylor.com/bboltqueue

License:MIT License


Languages

Language:Go 100.0%