Add Temporal worker and test client programs
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.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user