How to set ClientOptions in Go
Create an instance of Options
from the go.temporal.io/sdk/client
package and pass it the call to create a new Temporal Client.
HostPort
How to set the Temporal Client's host:port connection in Go
- Type:
string
- Default:
client.DefaultHostPort
(127.0.0.1:7233)
clientOptions := client.Options{
HostPort: client.DefaultHostPort,
}
temporalClient, err := client.Dial(clientOptions)
The HostPort
value is a gRPC address and therefore can also support a special-formatted address of <resolver>:///<value>
that will use a registered resolver.
By default all hosts returned from the resolver will be used in a round-robin fashion.
The "dns" resolver is registered by default.
Using a dns:///
prefixed address will cause a periodic round-robin resolution of all IPs for all DNS addresses.
A custom resolver can be created to provide multiple hosts in other ways.
For example, to manually provide multiple IPs to round-robin across, a google.golang.org/grpc/resolver/
manual resolver can be created and registered with a custom scheme:
builder := manual.NewBuilderWithScheme("myresolver")
builder.InitialState(resolver.State{Addresses: []resolver.Address{{Addr: "1.2.3.4:1234"},{Addr: "2.3.4.5:2345"}}})
resolver.Register(builder)
temporalClient, err := client.Dial(client.Options{HostPort: "myresolver:///ignoredvalue"})
Other more advanced resolvers can also be registered.
Namespace
Set the Namespace
field on an instance of the Client Options.
// ...
clientOptions := client.Options{
Namespace: "your-custom-namespace",
}
temporalClient, err := client.Dial(clientOptions)
// ...
Logger
How to use a custom logger in Go
This field sets a custom Logger that is used for all logging actions of the instance of the Temporal Client.
Although the Go SDK does not support most third-party logging solutions natively, our friends at Banzai Cloud built the adapter package logur which makes it possible to use third party loggers with minimal overhead. Most of the popular logging solutions have existing adapters in Logur, but you can find a full list in the Logur Github project.
Here is an example of using Logur to support Logrus:
package main
import (
"go.temporal.io/sdk/client"
"github.com/sirupsen/logrus"
logrusadapter "logur.dev/adapter/logrus"
"logur.dev/logur"
)
func main() {
// ...
logger := logur.LoggerToKV(logrusadapter.New(logrus.New()))
clientOptions := client.Options{
Logger: logger,
}
temporalClient, err := client.Dial(clientOptions)
// ...
}
MetricsHandler
Sets the metric scope, which metrics should be reported
- Type:
metrics.Handler
- Default: None
Identity
Sets an identify that can be used to track this host for debugging
DataConverter
Sets DataConverter to customize serialization/deserialization of arguments in Temporal
- Type:
converter.DataConverter
ContextPropagators
Sets ContextPropagators that allows users to control the context information passed through a Workflow
- Type:
[]ContextPropagator
ConnectionOptions
Sets options for server connection that allow users to control features of connections such as TLS settings
- Type:
ConnectionOptions
HeadersProvider
Sets custom request headers
- Type:
HeadersProvider
TrafficController
Set to induce artificial failures in test scenarios
- Type:
TrafficController
Interceptors
gRPC interceptors that are applied to every RPC call performed by this connection. By default, an interceptor is included; it automatically retries retryable errors. If you do not want to perform automatic retries, set this to an empty list (or a list with your own interceptors).
- Type:
[]ClientInterceptor