feat(phase-1.2): temporal SDK client, worker mgmt, k8s deployments
CI / CI (pull_request) Successful in 4m32s
CI / CI (pull_request) Successful in 4m32s
- internal/temporal/client.go: robust client with retry + TLS + health check - internal/temporal/worker.go: worker creation, registration, lifecycle - internal/temporal/context.go: timeout helpers - k8s/worker-deployment.yaml: 2-10 replica HPA, health probes, security context - k8s/workflow-runner-deployment.yaml: singleton runner with probes - k8s/kustomization.yaml: updated resource list, removed missing ref Tests: 11 pass (client_test.go + worker_test.go) Build: go build ./... clean Kustomize: dry-run validated
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package temporal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"go.temporal.io/sdk/client"
|
||||
"go.temporal.io/sdk/worker"
|
||||
)
|
||||
|
||||
// WorkerConfig holds configuration for worker creation.
|
||||
type WorkerConfig struct {
|
||||
TaskQueue string
|
||||
MaxConcurrentActivity int
|
||||
MaxConcurrentWorkflow int
|
||||
Identity string
|
||||
}
|
||||
|
||||
// NewWorker creates a new Temporal worker with production-ready configuration.
|
||||
//
|
||||
// Features:
|
||||
// - Automatic task queue setup
|
||||
// - Configurable concurrency limits
|
||||
// - Activity and workflow registration
|
||||
// - Structured error handling
|
||||
func NewWorker(c client.Client, cfg WorkerConfig) (worker.Worker, error) {
|
||||
if cfg.TaskQueue == "" {
|
||||
cfg.TaskQueue = "poimen-taskqueue"
|
||||
}
|
||||
if cfg.MaxConcurrentActivity == 0 {
|
||||
cfg.MaxConcurrentActivity = 10
|
||||
}
|
||||
if cfg.MaxConcurrentWorkflow == 0 {
|
||||
cfg.MaxConcurrentWorkflow = 10
|
||||
}
|
||||
if cfg.Identity == "" {
|
||||
cfg.Identity = "poimen-worker-default"
|
||||
}
|
||||
|
||||
workerOptions := worker.Options{
|
||||
Identity: cfg.Identity,
|
||||
MaxConcurrentActivityExecutionSize: cfg.MaxConcurrentActivity,
|
||||
MaxConcurrentWorkflowTaskExecutionSize: cfg.MaxConcurrentWorkflow,
|
||||
}
|
||||
|
||||
w := worker.New(c, cfg.TaskQueue, workerOptions)
|
||||
if w == nil {
|
||||
return nil, fmt.Errorf("failed to create worker for task queue: %s", cfg.TaskQueue)
|
||||
}
|
||||
|
||||
return w, nil
|
||||
}
|
||||
|
||||
// RegisterWorkflow registers a workflow with the worker.
|
||||
func RegisterWorkflow(w worker.Worker, workflow interface{}) error {
|
||||
if w == nil {
|
||||
return fmt.Errorf("worker is nil")
|
||||
}
|
||||
w.RegisterWorkflow(workflow)
|
||||
return nil
|
||||
}
|
||||
|
||||
// RegisterActivity registers an activity with the worker.
|
||||
func RegisterActivity(w worker.Worker, activity interface{}) error {
|
||||
if w == nil {
|
||||
return fmt.Errorf("worker is nil")
|
||||
}
|
||||
w.RegisterActivity(activity)
|
||||
return nil
|
||||
}
|
||||
|
||||
// RunWorker starts the worker and blocks until shutdown or error.
|
||||
func RunWorker(w worker.Worker) error {
|
||||
if w == nil {
|
||||
return fmt.Errorf("worker is nil")
|
||||
}
|
||||
return w.Run(worker.InterruptCh())
|
||||
}
|
||||
|
||||
// StopWorker gracefully stops the worker.
|
||||
func StopWorker(w worker.Worker) {
|
||||
if w != nil {
|
||||
w.Stop()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user