A repository for go-micro plugins.
Check out the Micro on NATS blog post to learn more about plugins.
Follow us on Twitter at @MicroHQ, join the Slack community here or check out the Mailing List.
| Directory | Description |
|---|---|
| Broker | Asynchronous Pub/Sub; NATS, NSQ, RabbitMQ, Kafka |
| Client | Alternative clients; gRPC, HTTP |
| Codec | RPC Encoding; BSON, Mercury |
| KV | Key-Value; Memcached, Redis |
| Metrics | Instrumentation; Statsd, Telegraf, Prometheus |
| Micro | Micro Toolkit Plugins |
| Registry | Service Discovery; Etcd, Gossip, NATS |
| Selector | Node Selection; Label, Mercury |
| Server | Alternative servers; gRPC, HTTP |
| Sync | Locking/Leadership election; Consul, Etcd |
| Trace | Distributed tracing; Zipkin |
| Transport | Synchronous Request/Response; NATS, RabbitMQ |
| Wrappers | Client/Server middleware; Circuit Breakers, Rate Limit |
| Feature | Description | Author |
|---|---|---|
| Registry/Kubernetes | Service discovery via the Kubernetes API | @nickjackson |
| Registry/Zookeeper | Service discovery using Zookeeper | @HeavyHorst |
Plugins can be added to go-micro in the following ways. By doing so they'll be available to set via command line args or environment variables.
import (
"github.com/micro/go-micro/cmd"
_ "github.com/micro/go-plugins/broker/rabbitmq"
_ "github.com/micro/go-plugins/registry/kubernetes"
_ "github.com/micro/go-plugins/transport/nats"
)
func main() {
// Parse CLI flags
cmd.Init()
}The same is achieved when calling service.Init
import (
"github.com/micro/go-micro"
_ "github.com/micro/go-plugins/broker/rabbitmq"
_ "github.com/micro/go-plugins/registry/kubernetes"
_ "github.com/micro/go-plugins/transport/nats"
)
func main() {
service := micro.NewService(
// Set service name
micro.Name("my.service"),
)
// Parse CLI flags
service.Init()
}Activate via a command line flag
go run service.go --broker=rabbitmq --registry=kubernetes --transport=natsCLI Flags provide a simple way to initialise plugins but you can do the same yourself.
import (
"github.com/micro/go-micro"
"github.com/micro/go-plugins/registry/kubernetes"
)
func main() {
registry := kubernetes.NewRegistry() //a default to using env vars for master API
service := micro.NewService(
// Set service name
micro.Name("my.service"),
// Set service registry
micro.Registry(registry),
)
}You may want to swap out plugins using automation or add plugins to the micro toolkit. An easy way to do this is by maintaining a separate file for plugin imports and including it during the build.
Create file plugins.go
package main
import (
_ "github.com/micro/go-plugins/broker/rabbitmq"
_ "github.com/micro/go-plugins/registry/kubernetes"
_ "github.com/micro/go-plugins/transport/nats"
)Build with plugins.go
go build -o service main.go plugins.goRun with plugins
service --broker=rabbitmq --registry=kubernetes --transport=nats