Add the ability to switch out client/server
This commit is contained in:
parent
f9709ffa6e
commit
20feb95e18
@ -69,7 +69,7 @@ $ go run examples/service/main.go
|
|||||||
|
|
||||||
### Test Service
|
### Test Service
|
||||||
```
|
```
|
||||||
$ go run examples/service/main.go --client
|
$ go run examples/service/main.go --run_client
|
||||||
Hello John
|
Hello John
|
||||||
```
|
```
|
||||||
|
|
||||||
|
37
cmd/cmd.go
37
cmd/cmd.go
@ -51,6 +51,11 @@ var (
|
|||||||
DefaultCmd = newCmd()
|
DefaultCmd = newCmd()
|
||||||
|
|
||||||
DefaultFlags = []cli.Flag{
|
DefaultFlags = []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "client",
|
||||||
|
EnvVar: "MICRO_CLIENT",
|
||||||
|
Usage: "Client for go-micro; rpc",
|
||||||
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "client_request_timeout",
|
Name: "client_request_timeout",
|
||||||
EnvVar: "MICRO_CLIENT_REQUEST_TIMEOUT",
|
EnvVar: "MICRO_CLIENT_REQUEST_TIMEOUT",
|
||||||
@ -127,6 +132,11 @@ var (
|
|||||||
EnvVar: "MICRO_SELECTOR",
|
EnvVar: "MICRO_SELECTOR",
|
||||||
Usage: "Selector used to pick nodes for querying",
|
Usage: "Selector used to pick nodes for querying",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "server",
|
||||||
|
EnvVar: "MICRO_SERVER",
|
||||||
|
Usage: "Server for go-micro; rpc",
|
||||||
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "transport",
|
Name: "transport",
|
||||||
EnvVar: "MICRO_TRANSPORT",
|
EnvVar: "MICRO_TRANSPORT",
|
||||||
@ -143,6 +153,10 @@ var (
|
|||||||
"http": http.NewBroker,
|
"http": http.NewBroker,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefaultClients = map[string]func(...client.Option) client.Client{
|
||||||
|
"rpc": client.NewClient,
|
||||||
|
}
|
||||||
|
|
||||||
DefaultRegistries = map[string]func(...registry.Option) registry.Registry{
|
DefaultRegistries = map[string]func(...registry.Option) registry.Registry{
|
||||||
"consul": consul.NewRegistry,
|
"consul": consul.NewRegistry,
|
||||||
"mdns": mdns.NewRegistry,
|
"mdns": mdns.NewRegistry,
|
||||||
@ -153,11 +167,17 @@ var (
|
|||||||
"cache": cache.NewSelector,
|
"cache": cache.NewSelector,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefaultServers = map[string]func(...server.Option) server.Server{
|
||||||
|
"rpc": server.NewServer,
|
||||||
|
}
|
||||||
|
|
||||||
DefaultTransports = map[string]func(...transport.Option) transport.Transport{
|
DefaultTransports = map[string]func(...transport.Option) transport.Transport{
|
||||||
"http": thttp.NewTransport,
|
"http": thttp.NewTransport,
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for default selection as the fall back
|
// used for default selection as the fall back
|
||||||
|
defaultClient = "rpc"
|
||||||
|
defaultServer = "rpc"
|
||||||
defaultBroker = "http"
|
defaultBroker = "http"
|
||||||
defaultRegistry = "consul"
|
defaultRegistry = "consul"
|
||||||
defaultSelector = "default"
|
defaultSelector = "default"
|
||||||
@ -183,8 +203,10 @@ func newCmd(opts ...Option) Cmd {
|
|||||||
Transport: &transport.DefaultTransport,
|
Transport: &transport.DefaultTransport,
|
||||||
|
|
||||||
Brokers: DefaultBrokers,
|
Brokers: DefaultBrokers,
|
||||||
|
Clients: DefaultClients,
|
||||||
Registries: DefaultRegistries,
|
Registries: DefaultRegistries,
|
||||||
Selectors: DefaultSelectors,
|
Selectors: DefaultSelectors,
|
||||||
|
Servers: DefaultServers,
|
||||||
Transports: DefaultTransports,
|
Transports: DefaultTransports,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,6 +248,20 @@ func (c *cmd) Before(ctx *cli.Context) error {
|
|||||||
var serverOpts []server.Option
|
var serverOpts []server.Option
|
||||||
var clientOpts []client.Option
|
var clientOpts []client.Option
|
||||||
|
|
||||||
|
// Set the client
|
||||||
|
if name := ctx.String("client"); len(name) > 0 {
|
||||||
|
if cl, ok := c.opts.Clients[name]; ok {
|
||||||
|
*c.opts.Client = cl()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the server
|
||||||
|
if name := ctx.String("server"); len(name) > 0 {
|
||||||
|
if s, ok := c.opts.Servers[name]; ok {
|
||||||
|
*c.opts.Server = s()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set the broker
|
// Set the broker
|
||||||
if name := ctx.String("broker"); len(name) > 0 || len(ctx.String("broker_address")) > 0 {
|
if name := ctx.String("broker"); len(name) > 0 || len(ctx.String("broker_address")) > 0 {
|
||||||
if len(name) == 0 {
|
if len(name) == 0 {
|
||||||
@ -241,7 +277,6 @@ func (c *cmd) Before(ctx *cli.Context) error {
|
|||||||
|
|
||||||
serverOpts = append(serverOpts, server.Broker(*c.opts.Broker))
|
serverOpts = append(serverOpts, server.Broker(*c.opts.Broker))
|
||||||
clientOpts = append(clientOpts, client.Broker(*c.opts.Broker))
|
clientOpts = append(clientOpts, client.Broker(*c.opts.Broker))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the registry
|
// Set the registry
|
||||||
|
@ -26,8 +26,10 @@ type Options struct {
|
|||||||
Server *server.Server
|
Server *server.Server
|
||||||
|
|
||||||
Brokers map[string]func(...broker.Option) broker.Broker
|
Brokers map[string]func(...broker.Option) broker.Broker
|
||||||
|
Clients map[string]func(...client.Option) client.Client
|
||||||
Registries map[string]func(...registry.Option) registry.Registry
|
Registries map[string]func(...registry.Option) registry.Registry
|
||||||
Selectors map[string]func(...selector.Option) selector.Selector
|
Selectors map[string]func(...selector.Option) selector.Selector
|
||||||
|
Servers map[string]func(...server.Option) server.Server
|
||||||
Transports map[string]func(...transport.Option) transport.Transport
|
Transports map[string]func(...transport.Option) transport.Transport
|
||||||
|
|
||||||
// Other options for implementations of the interface
|
// Other options for implementations of the interface
|
||||||
@ -99,6 +101,13 @@ func NewBroker(name string, b func(...broker.Option) broker.Broker) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New client func
|
||||||
|
func NewClient(name string, b func(...client.Option) client.Client) Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.Clients[name] = b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// New registry func
|
// New registry func
|
||||||
func NewRegistry(name string, r func(...registry.Option) registry.Registry) Option {
|
func NewRegistry(name string, r func(...registry.Option) registry.Registry) Option {
|
||||||
return func(o *Options) {
|
return func(o *Options) {
|
||||||
@ -113,6 +122,13 @@ func NewSelector(name string, s func(...selector.Option) selector.Selector) Opti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New server func
|
||||||
|
func NewServer(name string, s func(...server.Option) server.Server) Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.Servers[name] = s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// New transport func
|
// New transport func
|
||||||
func NewTransport(name string, t func(...transport.Option) transport.Transport) Option {
|
func NewTransport(name string, t func(...transport.Option) transport.Transport) Option {
|
||||||
return func(o *Options) {
|
return func(o *Options) {
|
||||||
|
@ -32,7 +32,7 @@ $GOPATH/bin/service
|
|||||||
3. Run the client
|
3. Run the client
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$GOPATH/bin/service --client
|
$GOPATH/bin/service --run_client
|
||||||
```
|
```
|
||||||
|
|
||||||
And that's all there is to it.
|
And that's all there is to it.
|
||||||
|
@ -48,12 +48,12 @@ func main() {
|
|||||||
"type": "helloworld",
|
"type": "helloworld",
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// Setup some flags. Specify --client to run the client
|
// Setup some flags. Specify --run_client to run the client
|
||||||
|
|
||||||
// Add runtime flags
|
// Add runtime flags
|
||||||
// We could do this below too
|
// We could do this below too
|
||||||
micro.Flags(cli.BoolFlag{
|
micro.Flags(cli.BoolFlag{
|
||||||
Name: "client",
|
Name: "run_client",
|
||||||
Usage: "Launch the client",
|
Usage: "Launch the client",
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
@ -65,7 +65,7 @@ func main() {
|
|||||||
// Add runtime action
|
// Add runtime action
|
||||||
// We could actually do this above
|
// We could actually do this above
|
||||||
micro.Action(func(c *cli.Context) {
|
micro.Action(func(c *cli.Context) {
|
||||||
if c.Bool("client") {
|
if c.Bool("run_client") {
|
||||||
runClient(service)
|
runClient(service)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
@ -78,12 +78,12 @@ func main() {
|
|||||||
"type": "helloworld",
|
"type": "helloworld",
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// Setup some flags. Specify --client to run the client
|
// Setup some flags. Specify --run_client to run the client
|
||||||
|
|
||||||
// Add runtime flags
|
// Add runtime flags
|
||||||
// We could do this below too
|
// We could do this below too
|
||||||
micro.Flags(cli.BoolFlag{
|
micro.Flags(cli.BoolFlag{
|
||||||
Name: "client",
|
Name: "run_client",
|
||||||
Usage: "Launch the client",
|
Usage: "Launch the client",
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
@ -95,7 +95,7 @@ func main() {
|
|||||||
// Add runtime action
|
// Add runtime action
|
||||||
// We could actually do this above
|
// We could actually do this above
|
||||||
micro.Action(func(c *cli.Context) {
|
micro.Action(func(c *cli.Context) {
|
||||||
if c.Bool("client") {
|
if c.Bool("run_client") {
|
||||||
runClient(service)
|
runClient(service)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user