goq

package module
v0.0.0-...-db05604 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2017 License: MIT Imports: 2 Imported by: 2

README

GoQ Build Status Go Report Card

Package Goq provides a lightweight, extensible, in-memory message broker.

go get github.com/masslessparticle/goq

Running tests:

go get github.com/onsi/ginkgo
go get github.com/onsi/gomega
go install github.com/onsi/ginkgo/ginkgo

ginkgo -r

QuickStart

client := testhelpers.NewTestClient("Subscription - 1")

publisher := pubsub.NewRoundRobinPublisher()
publisher.Subscribe(client)

queue := goq.NewGoQ(25, publisher)
queue.StartPublishing()
queue.Enqueue(goq.Message{Id: "Message - 1"})
queue.StopPublishing()

Creating a Queue

The goq.NewGoQ() method takes a max queue-depth and a PubSub

queue := goq.NewGoQ(25, pubsub)

QClient

A subscriber to the message broker. QClients are called according to the strategy provided by the PubSub. A QClient is anything implementing goq.QClient:

type QClient interface {
	Id() string
	Notify(message Message) error
}

PubSub

PubSub is the component that handles client subscription and message delivery. GoQ provides three message delivery strategies:

  • Deliver to all clients.
  • Round Robin.
  • Least Used.

Anything implementing the goq.PubSub interface can be a PubSub:

type PubSub interface {
	Done()
	Publish(msg Message) bool
	Subscribe(client QClient) error
	Unsubscribe(qClient QClient)
	SubscriberCount() int
}

Message

The type received and emitted by the queue.

Contributing

Pull requests, bug fixes and issue reports are welcome and appreciated.

Licence

MIT

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type GoQ

type GoQ struct {
	// contains filtered or unexported fields
}

func NewGoQ

func NewGoQ(queueDepth int, publisher PubSub) *GoQ

func (*GoQ) Enqueue

func (q *GoQ) Enqueue(message Message) error

func (*GoQ) PausePublishing

func (q *GoQ) PausePublishing()

func (*GoQ) StartPublishing

func (q *GoQ) StartPublishing()

func (*GoQ) StopPublishing

func (q *GoQ) StopPublishing()

type Message

type Message struct {
	Id      string
	Payload interface{}
}

type PubSub

type PubSub interface {
	Done()
	Publish(msg Message) bool
	Subscribe(client QClient) error
	Unsubscribe(qClient QClient)
	SubscriberCount() int
}

type QClient

type QClient interface {
	Id() string
	Notify(message Message) error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL