redo pubsub
All checks were successful
Build and Publish / BuildAndDeployAmd64 (push) Successful in 34s
Build and Publish / BuildAndDeployArm64 (push) Successful in 3m49s

This commit is contained in:
matst80
2025-11-25 23:06:36 +01:00
parent f640cd7d2c
commit d5d2b3e711
6 changed files with 80 additions and 142 deletions

View File

@@ -80,6 +80,8 @@ func main() {
log.Printf("loaded %d promotions", len(promotionData.State.Promotions))
inventoryPubSub := actor.NewPubSub[inventory.InventoryChange]()
promotionService := promotions.NewPromotionService(nil)
reg := cart.NewCartMultationRegistry()
@@ -109,11 +111,20 @@ func main() {
grainSpawns.Inc()
ret := cart.NewCartGrain(id, time.Now())
// Set baseline lastChange at spawn; replay may update it to last event timestamp.
inventoryPubSub.Subscribe(ret.HandleInventoryChange)
err := diskStorage.LoadEvents(ctx, id, ret)
return ret, err
},
Destroy: func(grain actor.Grain[cart.CartGrain]) error {
cart, err := grain.GetCurrentState()
if err != nil {
return err
}
inventoryPubSub.Unsubscribe(cart.HandleInventoryChange)
return nil
},
SpawnHost: func(host string) (actor.Host, error) {
return proxy.NewRemoteHost(host)
},
@@ -127,13 +138,6 @@ func main() {
log.Fatalf("Error creating cart pool: %v\n", err)
}
pool.SetPubSub(actor.NewPubSub(func(id uint64, event actor.Event) {
grain, _ := pool.Get(context.Background(), id)
if sub, ok := any(grain).(actor.Subscribable); ok {
sub.Notify(event)
}
}))
klarnaClient := NewKlarnaClient(KlarnaPlaygroundUrl, os.Getenv("KLARNA_API_USERNAME"), os.Getenv("KLARNA_API_PASSWORD"))
rdb := redis.NewClient(&redis.Options{
Addr: redisAddress,
@@ -245,6 +249,15 @@ func main() {
srvErr <- srv.ListenAndServe()
}()
listener := inventory.NewInventoryChangeListener(rdb, context.Background(), func(changes []inventory.InventoryChange) {
for _, change := range changes {
log.Printf("inventory change: %v", change)
inventoryPubSub.Publish(change)
}
})
go listener.Start()
log.Print("Server started at port 8080")
go http.ListenAndServe(":8081", debugMux)