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/highalpha/go-plugins/broker/rabbitmq"
_ "github.com/highalpha/go-plugins/registry/kubernetes"
_ "github.com/highalpha/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/highalpha/go-plugins/broker/rabbitmq"
_ "github.com/highalpha/go-plugins/registry/kubernetes"
_ "github.com/highalpha/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=nats
CLI Flags provide a simple way to initialise plugins but you can do the same yourself.
import (
"github.com/micro/go-micro"
"github.com/highalpha/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/highalpha/go-plugins/broker/rabbitmq"
_ "github.com/highalpha/go-plugins/registry/kubernetes"
_ "github.com/highalpha/go-plugins/transport/nats"
)
Build with plugins.go
go build -o service main.go plugins.go
Run with plugins
service --broker=rabbitmq --registry=kubernetes --transport=nats