Signals
A signal is implemented as a struct value included on the workflow input.
- Schema
- Go
example.proto
syntax="proto3";
package example.v1;
import "google/protobuf/empty.proto";
import "temporal/v1/temporal.proto";
service Example {
rpc Foo(FooInput) returns (FooOutput) {
option (temporal.v1.workflow) = {
signal: { ref: "Bar" }
};
}
rpc Bar(BarInput) returns (google.protobuf.Empty) {
option (temporal.v1.signal) = {};
}
}
example.go
package example
import (
examplev1 "path/to/gen/example/v1"
"go.temporal.io/sdk/workflow"
)
type FooWorkflow struct {
examplev1.FooWorkflowInput
}
func (w *FooWorkflow) Execute(ctx workflow.Context) (*examplev1.FooOutput, error) {
bar, _ := w.Bar.Receive(ctx)
workflow.GetLogger(ctx).Info("received Bar signal", "bar", bar)
return &examplev1.FooOutput{}, nil
}
Fields
ReceiveChannel
The underlying channel associated with the signal.
- Go
- Schema
example.go
package example
import (
examplev1 "path/to/gen/example/v1"
"go.temporal.io/sdk/workflow"
)
type FooWorkflow struct {
*examplev1.FooWorkflowInput
}
func (w *FooWorkflow) Execute(ctx workflow.Context) (*examplev1.FooOutput, error) {
workflow.NewSelector(ctx).
AddReceive(w.Bar.ReceiveChannel, func(workflow.ReceiveChannel, bool) {
bar := w.Bar.ReceiveAsync()
workflow.GetLogger(ctx).Info("received Bar signal", "bar", bar)
}).
AddReceive(w.Baz.ReceiveChannel, func(workflow.ReceiveChannel, bool) {
baz := w.Baz.ReceiveAsync()
workflow.GetLogger(ctx).Info("received Baz signal", "baz", baz)
}).
Select(ctx)
return &examplev1.FooOutput{}, nil
}
example.proto
syntax="proto3";
package example.v1;
import "google/protobuf/empty.proto";
import "temporal/v1/temporal.proto";
service Example {
rpc Foo(FooInput) returns (FooOutput) {
option (temporal.v1.workflow) = {
signal: { ref: "Bar" }
signal: { ref: "Baz" }
};
}
rpc Bar(BarInput) returns (google.protobuf.Empty) {
option (temporal.v1.signal) = {};
}
rpc Baz(BazInput) returns (google.protobuf.Empty) {
option (temporal.v1.signal) = {};
}
}