Skip to content

MasslessParticle/GoQ

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Lightweight message queue in Golang

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages