// Command devnats 启动一个内嵌、开启 JetStream 的本地 NATS 服务器, // 用于无 Docker 环境下的本地联调(生产环境用 deploy/nats 的真实集群)。 package main import ( "log" "os" "os/signal" "syscall" "github.com/nats-io/nats-server/v2/server" ) func main() { storeDir, err := os.MkdirTemp("", "sundynix-jetstream-") if err != nil { log.Fatalf("[devnats] tempdir: %v", err) } opts := &server.Options{ Host: "127.0.0.1", Port: 4222, JetStream: true, StoreDir: storeDir, } ns, err := server.NewServer(opts) if err != nil { log.Fatalf("[devnats] new server: %v", err) } go ns.Start() if !ns.ReadyForConnections(5e9) { log.Fatal("[devnats] not ready") } log.Printf("[devnats] JetStream NATS ready on %s (store=%s)", ns.ClientURL(), storeDir) sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) <-sig log.Println("[devnats] shutting down") shutdownQuietly(ns) _ = os.RemoveAll(storeDir) } // shutdownQuietly 容忍内嵌 server 退出时偶发的 "close of nil channel" panic。 func shutdownQuietly(ns *server.Server) { defer func() { _ = recover() }() ns.Shutdown() ns.WaitForShutdown() }