Skip to content

apache/dubbo-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Apache Dubbo for Golang

Build Status codecov go.dev reference Go Report Card license


Apache Dubbo is an easy-to-use Web and RPC framework that provides multiple language implementations(Go,Java,Rust,Node.js,Web) for communication, service discovery, traffic management, observability, security, tools, and best practices for building enterprise-ready microservices.

Dubbo-go is the Go implementation oftriple protocol(a fully gRPC compatible and HTTP-friendly protocol) and the various features for building microservice architecture designed by Dubbo.

Visitthe official websitefor more information.

Getting started

You can learn how to develop a dubbo-go RPC application step by step in 5 minutes by following ourQuick Startdemo.

It's as simple as the code shown below, you define a service with Protobuf, provide your own service implementation, register it to a server, and start the server.

func(srv*GreetTripleServer)Greet(ctxcontext.Context,req*greet.GreetRequest) (*greet.GreetResponse,error) {
resp:=&greet.GreetResponse{Greeting:req.Name}
returnresp,nil
}

funcmain() {
srv,_:=server.NewServer(
server.WithServerProtocol(
protocol.WithPort(20000),
protocol.WithTriple(),
),
)

_:=greet.RegisterGreetServiceHandler(srv,&GreetTripleServer{})

iferr:=srv.Serve();err!=nil{
logger.Error(err)
}
}

After the server is up and running, call your service via cURL:

curl \
--header"Content-Type: application/json"\
--data'{ "name": "Dubbo" }'\
http://localhost:20000/greet.GreetService/Greet

Or, you can start a standard dubbo-go client to call the service:

funcmain() {
cli,_:=client.NewClient(
client.WithClientURL("127.0.0.1:20000"),
)

svc,_:=greet.NewGreetService(cli)

resp,_:=svc.Greet(context.Background(),&greet.GreetRequest{Name:"hello world"})

logger.Infof("Greet response: %s",resp.Greeting)
}

See thesamplesfor detailed information on usage. Next, learn how to deploy, monitor and manage the traffic of your dubbo-go application by visiting the official website.

Features

dubbo-go-architecture

  • RPC Protocols:Triple, gRPC compatible and HTTP-friendly
  • Service Discovery:Nacos, Zookeeper, Etcd, Polaris-mesh, Consul.
  • Load Balance:Adaptive, Random, RoundRobin, LeastActive, ConsistentHash
  • Traffic Management:traffic split, timeout, rate limiting, canary release
  • Configuration:yaml file, dynamic configuration(Nacos, Zookeeper, etc.).
  • Observability:metrics(Prometheus, Grafana) and tracing(Jaeger, Zipkin).
  • HA Strategy:Failover, Failfast, Failsafe/Failback, Available, Broadcast, Forking

Ecosystem

Contributing

Please visitCONTRIBUTINGfor details on submitting patches and the contribution workflow.

Contact

If you are usingapache/dubbo-goand think that it helps you or want to contribute code for Dubbo-go, please add your company tothe user listto let us know your needs.

See more user cases

License

Apache Dubbo-go software is licensed under the Apache License Version 2.0. See the LICENSE file for details.