https://github.com/sincolb/eventhub
A stand-alone version of the event subscription component
https://github.com/sincolb/eventhub
event golang pubsub subscribe
Last synced: 5 months ago
JSON representation
A stand-alone version of the event subscription component
- Host: GitHub
- URL: https://github.com/sincolb/eventhub
- Owner: sincolb
- License: mit
- Created: 2025-01-19T07:38:14.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-07T07:09:50.000Z (over 1 year ago)
- Last Synced: 2025-03-07T08:23:05.243Z (over 1 year ago)
- Topics: event, golang, pubsub, subscribe
- Language: Go
- Homepage:
- Size: 84 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# eventhub
[](https://codecov.io/github/sincolb/eventhub)
[](https://godoc.org/github.com/sincolb/eventhub)
[](https://goreportcard.com/report/github.com/sincolb/eventhub)
[](https://github.com/sincolb/eventhub/actions/workflows/go.yml)
`eventhub` is a stand-alone version of the event subscription component that can accept multiple or one results, and supports timeouts and contexts.
## Install
```console
go get github.com/sincolb/eventhub
```
## Usage
```
eventHubTable := eventhub.NewEventHubTable[string]()
defer eventHubTable.Stop()
eventHubTable.Distribute("eventNname", time.Millisecond*10, "event data")
done := make(chan struct{})
go func() {
got, err := eventHubTable.Subscribe("eventNname", time.Millisecond*100)
fmt.Println(got, err)
done <- struct{}{}
}()
<-done
```
### Subscribe only once
```
hub := eventhub.NewEventHub()
defer hub.Close()
go func() {
defer wg.Done()
hub.Publish(&struct {
Name string
}{
Name: "title",
})
}()
got, err := hub.Subscribe(time.Millisecond * 10)
fmt.Println(got, err)
```
### Subscribes for multiple
```
hub := NewEventHub()
defer hub.Close()
go func() {
for i := 0; i < 5; i++ {
hub.Publish(i, 0)
// simulates latency into the eventhub
time.Sleep(time.Millisecond * 10)
}
}()
res, err := hub.Subscribes(time.Millisecond*100, 4)
fmt.Println(res, err)
```