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
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()
The goq.NewGoQ() method takes a max queue-depth and a PubSub
queue := goq.NewGoQ(25, pubsub)
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 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
}
The type received and emitted by the queue.
Pull requests, bug fixes and issue reports are welcome and appreciated.
MIT