message broker sifatida redis qo'shildi
This commit is contained in:
39
internal/broker/redis.go
Normal file
39
internal/broker/redis.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package broker
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/JscorpTech/notification/internal/domain"
|
||||
"github.com/JscorpTech/notification/internal/redis"
|
||||
)
|
||||
|
||||
type redisBroker struct {
|
||||
Ctx context.Context
|
||||
}
|
||||
|
||||
func NewRedisBroker(ctx context.Context) domain.BrokerPort {
|
||||
return &redisBroker{
|
||||
Ctx: ctx,
|
||||
}
|
||||
}
|
||||
|
||||
func (r redisBroker) Subscribe(topic string, handler func(domain.NotificationMsg)) {
|
||||
go func() {
|
||||
for {
|
||||
var notification domain.NotificationMsg
|
||||
val, err := redis.RDB.BLPop(r.Ctx, 0, topic).Result()
|
||||
if err != nil {
|
||||
fmt.Print(err.Error())
|
||||
return
|
||||
}
|
||||
if err := json.Unmarshal([]byte(val[1]), ¬ification); err != nil {
|
||||
fmt.Print(err.Error())
|
||||
return
|
||||
}
|
||||
go handler(notification)
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user