package main import ( "flag" "log" "os" "os/signal" "syscall" "go.temporal.io/sdk/client" "go.temporal.io/sdk/worker" "forgejo.riotpiao.com/rock/homelab-frontend/internal/workflow" ) func main() { hostPort := flag.String("host", "temporal.temporal:7233", "Temporal server host:port") namespace := flag.String("namespace", "production", "Temporal namespace") taskQueue := flag.String("queue", "worker-production", "Task queue") flag.Parse() // Connect to Temporal server c, err := client.Dial(client.Options{ HostPort: *hostPort, Namespace: *namespace, }) if err != nil { log.Fatalf("Failed to connect to Temporal: %v", err) } defer c.Close() log.Printf("Connected to Temporal at %s (namespace: %s)", *hostPort, *namespace) // Create worker w := worker.New(c, *taskQueue, worker.Options{}) // Register workflows w.RegisterWorkflow(workflow.HelloWorldWorkflow) w.RegisterWorkflow(workflow.GreeterWorkflow) w.RegisterWorkflow(workflow.ProcessOrderWorkflow) // Register activities w.RegisterActivity(workflow.GreetActivity) w.RegisterActivity(workflow.ValidateOrderActivity) w.RegisterActivity(workflow.ProcessPaymentActivity) w.RegisterActivity(workflow.NotifyCustomerActivity) log.Printf("Starting worker on task queue: %s", *taskQueue) // Handle graceful shutdown sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) go func() { <-sigChan log.Println("Shutting down worker...") w.Stop() }() // Run worker (blocks) if err := w.Run(worker.InterruptCh()); err != nil { log.Fatalf("Worker error: %v", err) } }