Plugins
Plugins are scoped under each interface directory within this repository. To use a plugin, import it directly from the corresponding interface subpackage and pass it to your service via options.
Common interfaces and locations:
- Registry:
go-micro.dev/v6/registry/*(e.g.consul,etcd,nats,mdns) - Broker:
go-micro.dev/v6/broker/*(e.g.nats,rabbitmq,http,memory) - Transport:
go-micro.dev/v6/transport/*(e.g.nats, defaulthttp) - Server:
go-micro.dev/v6/server/*(e.g.grpcfor native gRPC compatibility) - Client:
go-micro.dev/v6/client/*(e.g.grpcfor native gRPC compatibility) - Store:
go-micro.dev/v6/store/*(e.g.postgres,mysql,nats-js-kv,memory) - Auth, Cache, etc. follow the same pattern under their respective directories.
Registry Examples
Consul:
import (
"go-micro.dev/v6"
"go-micro.dev/v6/registry/consul"
)
func main() {
reg := consul.NewConsulRegistry()
svc := micro.NewService("plugin-example",
micro.Registry(reg),
)
svc.Init()
svc.Run()
}
Etcd:
import (
"go-micro.dev/v6"
"go-micro.dev/v6/registry/etcd"
)
func main() {
reg := etcd.NewRegistry()
svc := micro.NewService("plugin-example", micro.Registry(reg))
svc.Init()
svc.Run()
}
Broker Examples
NATS:
import (
"go-micro.dev/v6"
bnats "go-micro.dev/v6/broker/nats"
)
func main() {
b := bnats.NewNatsBroker()
svc := micro.NewService("plugin-example", micro.Broker(b))
svc.Init()
svc.Run()
}
RabbitMQ:
import (
"go-micro.dev/v6"
"go-micro.dev/v6/broker/rabbitmq"
)
func main() {
b := rabbitmq.NewBroker()
svc := micro.NewService("plugin-example", micro.Broker(b))
svc.Init()
svc.Run()
}
Transport Example (NATS)
import (
"go-micro.dev/v6"
tnats "go-micro.dev/v6/transport/nats"
)
func main() {
t := tnats.NewTransport()
svc := micro.NewService("plugin-example", micro.Transport(t))
svc.Init()
svc.Run()
}
gRPC Server/Client (Native gRPC Compatibility)
For native gRPC compatibility (required for grpcurl, polyglot gRPC clients, etc.), use the gRPC server and client plugins. Note: This is different from the gRPC transport.
import (
"go-micro.dev/v6"
grpcServer "go-micro.dev/v6/server/grpc"
grpcClient "go-micro.dev/v6/client/grpc"
)
func main() {
svc := micro.NewService("plugin-example",
micro.Server(grpcServer.NewServer()),
micro.Client(grpcClient.NewClient()),
)
svc.Init()
svc.Run()
}
See Native gRPC Compatibility for a complete guide.
Store Examples
Postgres:
import (
"go-micro.dev/v6"
postgres "go-micro.dev/v6/store/postgres"
)
func main() {
st := postgres.NewStore()
svc := micro.NewService("plugin-example", micro.Store(st))
svc.Init()
svc.Run()
}
NATS JetStream KV:
import (
"go-micro.dev/v6"
natsjskv "go-micro.dev/v6/store/nats-js-kv"
)
func main() {
st := natsjskv.NewStore()
svc := micro.NewService("plugin-example", micro.Store(st))
svc.Init()
svc.Run()
}
Notes
- Defaults: If you don’t set an implementation, Go Micro uses sensible in-memory or local defaults (e.g., mDNS for registry, HTTP transport, memory broker/store).
- Options: Each plugin exposes constructor options to configure addresses, credentials, TLS, etc.
- Imports: Only import the plugin you need; this keeps binaries small and dependencies explicit.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.