Documentation
ยถ
Overview ยถ
Package messagebus provides simple async message publisher
Example ยถ
package main
import (
"fmt"
"sync"
messagebus "github.com/vardius/message-bus"
)
func main() {
queueSize := 100
bus := messagebus.New(queueSize)
var wg sync.WaitGroup
wg.Add(2)
_ = bus.Subscribe("topic", func(v bool) {
defer wg.Done()
fmt.Println("s1", v)
})
_ = bus.Subscribe("topic", func(v bool) {
defer wg.Done()
fmt.Println("s2", v)
})
// Publish block only when the buffer of one of the subscribers is full.
// change the buffer size altering queueSize when creating new messagebus
bus.Publish("topic", true)
wg.Wait()
}
Output: s1 true s2 true
Example (Second) ยถ
package main
import (
"fmt"
messagebus "github.com/vardius/message-bus"
)
func main() {
queueSize := 2
subscribersAmount := 3
ch := make(chan int, queueSize)
defer close(ch)
bus := messagebus.New(queueSize)
for i := 0; i < subscribersAmount; i++ {
_ = bus.Subscribe("topic", func(i int, out chan<- int) { out <- i })
}
go func() {
for n := 0; n < queueSize; n++ {
bus.Publish("topic", n, ch)
}
}()
var sum = 0
for sum < (subscribersAmount * queueSize) {
select {
case <-ch:
sum++
}
}
fmt.Println(sum)
}
Output: 6
Index ยถ
Examples ยถ
Constants ยถ
This section is empty.
Variables ยถ
This section is empty.
Functions ยถ
This section is empty.
Types ยถ
type MessageBus ยถ
type MessageBus interface {
// Publish publishes arguments to the given topic subscribers
// Publish block only when the buffer of one of the subscribers is full.
Publish(topic string, args ...interface{})
// Close unsubscribe all handlers from given topic
Close(topic string)
// Subscribe subscribes to the given topic
Subscribe(topic string, fn interface{}) error
// Unsubscribe unsubscribe handler from the given topic
Unsubscribe(topic string, fn interface{}) error
}
MessageBus implements publish/subscribe messaging paradigm
func New ยถ
func New(handlerQueueSize int) MessageBus
New creates new MessageBus handlerQueueSize sets buffered channel length per subscriber
Click to show internal directories.
Click to hide internal directories.