GoQ

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

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.
goq.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