CLI referencia

add realtime

A realtime notification-gateway scaffoldolása: egy dedikált, horizontálisan skálázható cmd/realtime binary.

Ezt a generátort akkor éri meg elővenni, amikor a projektnek élő frissítéseket kell küldenie a csatlakozott kliensekhez: egy értesítés-badge, egy élő rendelésállapot, egy chatüzenet.

go tool gpsystem add realtime

Hozzáadja a cmd/realtime-ot: egy dedikált szervert, ami a kliens streaming-kapcsolatokat tartja (WebSocket, HTTP-streaming/SSE fallbackkel), és a bármely processből a notify/broadcast-on keresztül publikált üzeneteket kézbesíti. Nem hordoz üzleti függőséget, ezért szabadon, az API/worker processektől függetlenül skálázódik; lásd a Realtime oldalt az architektúráért és a skálázási történetért.

Explicit, opt-in parancs, nem new project default: mint az add worker-t, akkor futtatod, amikor a projektnek ténylegesen szüksége van a gatewayre, és egy Traefik-exponált service-et ad hozzá.

Mit generál

cmd/realtime/main.go
func main() {
    cfg := envconf.MustLoad[config.Config]()
    ctx := context.Background()

    err := realtime.Run(ctx, cfg.Realtime, func(topics *realtime.TopicAuth) error {
        // Itt authorizáld a megosztott topic-csatornákat, pl.:
        // topics.Allow("announcements", func(id *rbac.Identity) bool { return true })
        // gpsystem:topics
        return nil
    },
        // gpsystem:closers
    )
    if err != nil {
        log.Fatal(err)
    }
}
internal/platform/config/config.go
Realtime realtime.Config

A realtime.Config újrahasznosítja a VALKEY_*-ot (queue.Config) és a JWT_*-ot (auth.Config); nincs új secret, amit kezelni kell. Lásd a Realtime oldalt a teljes REALTIME_* táblázatért.

compose.yml és .env.example

Hozzáad egy realtime service-t (path-alapon routolva a /realtime alatt a projekt meglévő APP_HOST-ján, tehát nincs új DNS-bejegyzés vagy CORS-eset): nincs container_name (így a --scale működik), egy Traefik health-check label a /realtime/healthz-re mutatva (így egy draining példány kiesik a load-balancer poolból), responseForwarding.flushInterval=-1 (így a streamelt bájtok azonnal flush-ölnek a proxyn át).

compose.yml
realtime:
  build: { context: ., dockerfile: Dockerfile, target: development, args: { CMD: realtime } }
  depends_on:
    valkey:
      condition: service_started
  stop_grace_period: 30s
  labels:
    - traefik.http.routers.shopRealtime.rule=Host(`${APP_HOST}`) && PathPrefix(`/realtime`)
    - traefik.http.services.shopRealtime.loadbalancer.healthCheck.path=/realtime/healthz
.env.example
REALTIME_LISTEN_ADDR=:3000
REALTIME_DRAIN_TIMEOUT=20s
REALTIME_CHANNEL_PREFIX=<projekt>
REALTIME_MAX_CONNECTIONS=0

Skálázd minden más service-től függetlenül:

docker compose up -d --scale realtime=3

Megosztott topicok authorizálása

Minden kapcsolat automatikusan server-side feliratkozik a saját user:<subject> csatornájára; ehhez nem kell kód. A megosztott topicok opt-in: regisztrálj egy callbacket a cmd/realtime/main.go-ban a // gpsystem:topics anchornál, és egy kliens név szerint iratkozhat fel rá. Egy topic, aminek nincs regisztrált Allow-ja, sosem iratkoztatható fel; lásd a Realtime oldalt.

Egy notification bekötése

Az add realtime csak magát a gatewayt drótozza be. Futtasd az első add notification előtt, hogy a broadcast csatorna automatikusan bedrótozódjon a közös notify.Sender-be; ha már léteznek notificationök, add hozzá kézzel a notify.ChannelBroadcast-ot a Via-jukhoz és a broadcast-konstrukciót (lásd az add notification jegyzetét).

Az add realtime a gpsystem:imports/gpsystem:config anchoroknál ír a platform configban, és a gpsystem:services/gpsystem:env anchoroknál a compose.yml/.env.example-ben. Ha valamelyik anchor-komment hiányzik, a parancs megáll, és kiírja a beillesztendő blokkot, ugyanúgy, ahogy az add mail is teszi.

Copyright © 2026