Creates: - cmd/worker/main.go: Worker that registers workflows and activities - cmd/test-workflow/main.go: Test client to trigger workflows Adds go.temporal.io/sdk dependency to go.mod.
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"go.temporal.io/sdk/client"
|
|
"go.temporal.io/sdk/worker"
|
|
"github.com/Riotpiaole/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)
|
|
}
|
|
}
|