https://github.com/efureev/hubmessage
Bus Message system
https://github.com/efureev/hubmessage
bus events hub message suppub
Last synced: about 2 months ago
JSON representation
Bus Message system
- Host: GitHub
- URL: https://github.com/efureev/hubmessage
- Owner: efureev
- License: mit
- Created: 2019-03-12T22:39:10.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-09-17T11:27:20.000Z (over 5 years ago)
- Last Synced: 2025-01-15T09:02:34.725Z (3 months ago)
- Topics: bus, events, hub, message, suppub
- Language: Go
- Size: 45.9 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
README
# EventBus System
[](https://app.codacy.com/app/efureev/hubMessage?utm_source=github.com&utm_medium=referral&utm_content=efureev/hubMessage&utm_campaign=Badge_Grade_Dashboard)
[](https://travis-ci.org/efureev/hubMessage)
[](https://codeclimate.com/github/efureev/hubMessage/maintainability)
[](https://codeclimate.com/github/efureev/hubMessage/test_coverage)
[](https://codecov.io/gh/efureev/hubMessage)
[](https://goreportcard.com/report/github.com/efureev/hubMessage)# Install
```bash
go get -u github.com/efureev/hubMessage
```# Examples
### Basic
```go
import (
"errors"
"github.com/efureev/hubMessage"
"log"
)func main() {
h := hub.New()
defer h.Wait()
h.Subscribe("console", func(msg string) {
println(msg)
})
//..
h.Publish("console", `Hi`)
hub.Event("console", `test msg`)
//...
}
``````go
package mainimport (
"github.com/efureev/appmod"
"github.com/efureev/hubMessage"
"log"
)func main() {
hub.Get().BeforeStart(func(_ appmod.AppModule) error {
hub.Sub(`app.console`, func(msg string) {
log.Println(msg)
})
return nil
})
defer hub.Get().Wait() // if you want wait for finish message sending
hub.Get().Init()
// ... send message to hub from any places
hub.Event(`app.console`, `Config loaded`)
hub.Event(`app.console`, `Test message`)
}
```### Error handling
```go
package mainimport (
"errors"
"github.com/efureev/hubMessage"
"log"
)func main() {
h := hub.New()
out := make(chan error)
fatal := make(chan error)
defer h.Wait()
defer close(out)
defer close(fatal)
go func() {
for {
select{
case e:= <-out:
println(e)
case e:= <-fatal:
log.Fatal(e)
}
}
}()
h.Subscribe("errors", func(err error) {
out <- err
})
h.Subscribe("errors.fatal", func(err error) {
fatal <- err
})
h.Subscribe("errors.toChannel", func(err error, ch chan <- error) {
ch <- err
})
h.Publish("errors", errors.New("I do throw error"))
h.Publish("errors.fatal", errors.New("I do throw error"))
h.Publish("errors.toChannel", errors.New("I do throw error"), fatal)
h.Publish("errors.toChannel", errors.New("I do throw error"), out)
}
```### Event bus
```goimport (
"auth/internal/models"
hub "github.com/efureev/hubMessage"
)func registerEvents(events map[string]interface{}) {
for event, handle := range events {
err := hub.Sub(event, handle)
if err != nil {
panic(err)
}
}}
func eventList() map[string]interface{} {
return map[string]interface{}{
`user.registered`: func(user *models.User) {
println(`user registered: ` + user.Id)
},
`user.activated`: func(user *models.User) {
println(`user activated: ` + user.Id)
},
`test`: func(_ string) {
out <- `test`
},
`empty`: func() {
out <- `empty`
},
}
}// ... in other code:
hub.Event(`user.registered`, &models.User{})
hub.Event(`empty`)```