internal/website/docs/architecture/adr-001-plugin-architecture.md
Accepted
Microservices frameworks need to support multiple infrastructure backends (registries, brokers, transports, stores). Different teams have different preferences and existing infrastructure.
Hard-coding specific implementations:
Go Micro uses a pluggable architecture where:
go-micro/
├── registry/ # Interface definition
│ ├── registry.go
│ ├── mdns.go # Default implementation
│ ├── consul/ # Plugin
│ ├── etcd/ # Plugin
│ └── nats/ # Plugin
├── broker/
├── transport/
└── store/
Used by go-kit and other frameworks. Rejected because:
Like standard net/http. Rejected because:
Using Go plugins or external processes. Rejected because: