This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch refactor/next-2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/refactor/next-2 by this push:
new 9afd4755f8 Update go quickstart
9afd4755f8 is described below
commit 9afd4755f8521bfa25d812399985a46e03d790e9
Author: Albumen Kevin <[email protected]>
AuthorDate: Fri Feb 10 10:04:40 2023 +0800
Update go quickstart
---
content/zh-cn/overview/quickstart/_index.md | 8 +-
content/zh-cn/overview/quickstart/go/_index.md | 42 +++++
content/zh-cn/overview/quickstart/go/install.md | 48 +++++
.../overview/quickstart/go/quickstart_triple.md | 120 ++++++++++++
.../go/quickstart_triple_with_customize.md | 209 +++++++++++++++++++++
5 files changed, 424 insertions(+), 3 deletions(-)
diff --git a/content/zh-cn/overview/quickstart/_index.md
b/content/zh-cn/overview/quickstart/_index.md
index 17f2ca5ba5..ee4106b143 100755
--- a/content/zh-cn/overview/quickstart/_index.md
+++ b/content/zh-cn/overview/quickstart/_index.md
@@ -16,12 +16,11 @@ no_list: true
<h4 class="card-title">
<a href='{{< relref "./java/" >}}'>Java 微服务开发入门</a>
</h4>
- <p> </p>
+ <p>通过以下教程快速上手 Dubbo Java 开发:</p>
<p><a href='{{< relref "./java/brief" >}}'>1 - 快速部署</a></p>
<p><a href='{{< relref "./java/api" >}}'>2 - 基于 Dubbo API
开发</a></p>
<p><a href='{{< relref "./java/spring-boot" >}}'>3 - 基于
Dubbo x Spring Boot 开发</a></p>
<p><a href='{{< relref "./java/spring-xml" >}}'>4 - 基于
Dubbo x Spring XML 开发</a></p>
- <p></p>
</div>
</div>
</div>
@@ -31,7 +30,10 @@ no_list: true
<h4 class="card-title">
<a href='{{< relref "./go/" >}}'>Go 微服务开发入门</a>
</h4>
- <p>在服务初次调用失败后,通过重试能有效的提升总体调用成功率。</p>
+ <p>通过以下教程快速上手 Dubbo Go 开发:</p>
+ <p><a href='{{< relref "./go/install" >}}'>1 - 安装 Dubbo-go
开发环境</a></p>
+ <p><a href='{{< relref "./go/quickstart_triple" >}}'>2 -
完成一次 RPC 调用</a></p>
+ <p><a href='{{< relref
"./go/quickstart_triple_with_customize" >}}'>3 - 完成一次自己定义接口的 RPC 调用</a></p>
</div>
</div>
</div>
diff --git a/content/zh-cn/overview/quickstart/go/_index.md
b/content/zh-cn/overview/quickstart/go/_index.md
index 50a71b4047..a53889a5cd 100755
--- a/content/zh-cn/overview/quickstart/go/_index.md
+++ b/content/zh-cn/overview/quickstart/go/_index.md
@@ -3,4 +3,46 @@ type: docs
title: "Go 微服务开发入门"
linkTitle: "Go"
weight: 20
+no_list: true
---
+
+{{< blocks/section color="white" height="auto">}}
+<div class="td-content list-page">
+ <div class="lead"></div><header class="article-meta">
+ </header><div class="row">
+ <div class="col-sm col-md-6 mb-4">
+ <div class="h-100 card shadow" href="#">
+ <div class="card-body">
+ <h4 class="card-title">
+ <a href='{{< relref "./install" >}}'>安装 Dubbo-go 开发环境</a>
+ </h4>
+ <p>了解和安装 dubbogo-cli 工具</p>
+ </div>
+ </div>
+ </div>
+ <div class="col-sm col-md-6 mb-4">
+ <div class="h-100 card shadow" href="#">
+ <div class="card-body">
+ <h4 class="card-title">
+ <a href='{{< relref "./quickstart_triple" >}}'>完成一次 RPC
调用</a>
+ </h4>
+ <p>快速上手启动一个基于 Dubbo-go 的微服务应用</p>
+ </div>
+ </div>
+ </div>
+ <div class="col-sm col-md-6 mb-4">
+ <div class="h-100 card shadow" href="#">
+ <div class="card-body">
+ <h4 class="card-title">
+ <a href='{{< relref "./quickstart_triple_with_customize"
>}}'>完成一次自己定义接口的 RPC 调用</a>
+ </h4>
+ <p>从零上手开发一个基于 Dubbo-go 的微服务应用</p>
+ </div>
+ </div>
+ </div>
+</div>
+<hr>
+</div>
+
+{{< /blocks/section >}}
+
diff --git a/content/zh-cn/overview/quickstart/go/install.md
b/content/zh-cn/overview/quickstart/go/install.md
new file mode 100644
index 0000000000..9057c6b089
--- /dev/null
+++ b/content/zh-cn/overview/quickstart/go/install.md
@@ -0,0 +1,48 @@
+---
+type: docs
+title: 安装 Dubbo-go 开发环境
+weight: 1
+description: 1 - 安装 Dubbo-go 开发环境
+---
+### 1. 安装Go语言环境
+
+建议使用最新版 go 1.17
+
+go version >= go 1.15
+
+[【Go 语言官网下载地址】](https://golang.google.cn/)
+
+将 $GOPATH/bin 加入环境变量
+
+### 2. 安装序列化工具protoc
+
+[【protoc 下载地址】](https://github.com/protocolbuffers/protobuf/releases)
+
+### 3. 安装 dubbogo-cli 以及相关插件
+
+执行以下指令安装dubbogo-cli 至 $GOPATH/bin
+
+```bash
+$ export GOPROXY="https://goproxy.cn"
+$ go install github.com/dubbogo/dubbogo-cli@latest
+$ dubbogo-cli
+hello
+```
+
+安装依赖的工具插件
+
+```bash
+$ dubbogo-cli install all
+```
+
+确保上述安装的工具位于在系统环境变量内
+
+```bash
+$ protoc --version
+libprotoc 3.14.0
+$ protoc-gen-go --version
+protoc-gen-go v1.26.0
+$ protoc-gen-go-triple --version
+protoc-gen-go-triple 1.0.8
+```
+
diff --git a/content/zh-cn/overview/quickstart/go/quickstart_triple.md
b/content/zh-cn/overview/quickstart/go/quickstart_triple.md
new file mode 100644
index 0000000000..f3e2be412b
--- /dev/null
+++ b/content/zh-cn/overview/quickstart/go/quickstart_triple.md
@@ -0,0 +1,120 @@
+---
+type: docs
+title: 完成一次 RPC 调用
+weight: 2
+description: 2 - 完成一次 RPC 调用
+---
+
+
+## 1. 生成 Demo 项目
+
+使用安装好的 dubbogo-cli 工具,创建demo工程。
+
+```bash
+$ mkdir quickstart
+$ cd quickstart
+$ dubbogo-cli newDemo .
+$ tree .
+.
+├── api
+│ ├── samples_api.pb.go
+│ ├── samples_api.proto
+│ └── samples_api_triple.pb.go
+├── go-client
+│ ├── cmd
+│ │ └── client.go
+│ └── conf
+│ └── dubbogo.yaml
+├── go-server
+│ ├── cmd
+│ │ └── server.go
+│ └── conf
+│ └── dubbogo.yaml
+└── go.mod
+```
+
+可看到生成的项目中包含一个 client 项目和一个 server 项目,以及相关的配置文件。
+
+### 1.1 查看接口描述文件 helloworld.proto
+
+```protobuf
+syntax = "proto3";
+package api;
+
+option go_package = "./;api";
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (User) {}
+ // Sends a greeting via stream
+ rpc SayHelloStream (stream HelloRequest) returns (stream User) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ string name = 1;
+}
+
+// The response message containing the greetings
+message User {
+ string name = 1;
+ string id = 2;
+ int32 age = 3;
+}
+```
+
+demo项目中,默认生成了一个接口描述文件,接口服务名为 api.Greeter, 包含两个 RPC 方法,入参为 HelloRequest,返回值为
User,两个方法分别为普通 RPC 方法和 Streaming 类型 RPC 方法。
+
+### 1.2 (*可选) 使用安装好的编译工具编译 pb 接口
+
+```bash
+$ cd api
+$ protoc --go_out=. --go-triple_out=. ./samples_api.proto
+```
+
+参数意义:`--go_out=.` 使用上述安装的 `protoc-gen-go`
插件,生成文件到当前目录,`--go-triple_out=.`使用上述安装的 `protoc-gen-go-triple` 插件,生成文件到当前目录。
+
+执行该指令后,会生成两个文件,分别是helloworld.pb (包含 proto 结构) 和 helloworld_triple.pb.go (包含
triple 协议接口)。
+
+在 demo 工程中,预先生成好了这两个文件,修改 .proto 文件后重新执行命令生成,即可覆盖。
+
+## 2. 开启一次RPC调用
+
+项目根目录执行
+
+```
+$ go mod tidy
+```
+
+拉取到最新的框架依赖:
+
+```go
+module helloworld
+
+go 1.17
+
+require (
+ dubbo.apache.org/dubbo-go/v3 v3.0.1
+ github.com/dubbogo/grpc-go v1.42.9
+ github.com/dubbogo/triple v1.1.8
+ google.golang.org/protobuf v1.27.1
+)
+
+require (
+ ...
+)
+
+```
+
+先后启动服务端和客户端: 开启两个终端,在 go-server/cmd 和 go-client/cmd 文件夹下分别执行 `go run .` ,
可在客户端看到输出:
+
+```shell
+client response result: name:"Hello laurence" id:"12345" age:21
+```
+
+获得调用结果成功
+
+## 3. 更多
+
+细心的读者可以发现,以上例子编写的的服务端可以接受来自客户端的普通RPC、流式RPC调用请求。目前只编写了普通调用的Client,读者可以根据
samples 库中的例子来尝试编写流式客户端和服务端。
diff --git
a/content/zh-cn/overview/quickstart/go/quickstart_triple_with_customize.md
b/content/zh-cn/overview/quickstart/go/quickstart_triple_with_customize.md
new file mode 100644
index 0000000000..75386340d4
--- /dev/null
+++ b/content/zh-cn/overview/quickstart/go/quickstart_triple_with_customize.md
@@ -0,0 +1,209 @@
+---
+type: docs
+title: 完成一次自己定义接口的 RPC 调用
+weight: 3
+description: 3 - 完成一次 RPC 调用自己定义接口的版本
+---
+
+## 1.概述
+我们本章来实现一个简单的小需求,实现一个分布式ID生成服务,通过该服务可以获取分布式ID
+(假设的分布式ID,我们不探讨ID的生成方案和算法,这里直接使用uuid代替,只为演示自定义服务的创建)
+
+## 2. 服务端实现
+首先使用 dubbogo-cli 创建 IDC 服务
+```bash
+dubbogo-cli newApp IDC
+cd IDC
+tree .
+
+.
+├── Makefile
+├── api
+│ ├── api.pb.go
+│ ├── api.proto
+│ └── api_triple.pb.go
+├── build
+│ └── Dockerfile
+├── chart
+│ ├── app
+│ │ ├── Chart.yaml
+│ │ ├── templates
+│ │ │ ├── _helpers.tpl
+│ │ │ ├── deployment.yaml
+│ │ │ ├── service.yaml
+│ │ │ └── serviceaccount.yaml
+│ │ └── values.yaml
+│ └── nacos_env
+│ ├── Chart.yaml
+│ ├── templates
+│ │ ├── _helpers.tpl
+│ │ ├── deployment.yaml
+│ │ └── service.yaml
+│ └── values.yaml
+├── cmd
+│ └── app.go
+├── conf
+│ └── dubbogo.yaml
+├── go.mod
+├── go.sum
+└── pkg
+ └── service
+ └── service.go
+
+```
+
+我们编辑proto定义我们的接口
+
+```protobuf
+syntax = "proto3";
+package api;
+
+option go_package = "./;api";
+
+service Generator {
+ rpc GetID (GenReq) returns (GenResp) {}
+}
+
+message GenReq {
+ string appId = 1;
+}
+
+message GenResp {
+ string id = 1;
+}
+```
+
+生成代码
+
+```bash
+$ cd api
+$ protoc --go_out=. --go-triple_out=. ./api.proto
+```
+
+我们来调整service
+目录:pkg/service/service.go
+修改后的代码如下
+
+```go
+type GeneratorServerImpl struct {
+ api.UnimplementedGeneratorServer
+}
+
+func (s *GeneratorServerImpl) GetID(ctx context.Context, in *api.GenReq)
(*api.GenResp, error) {
+ logger.Infof("Dubbo-go GeneratorProvider AppId = %s\n", in.AppId)
+ uuid, err := uuid.NewV4()
+ if err != nil {
+ logger.Infof("Dubbo-go GeneratorProvider get id err = %v\n",
err)
+ return nil, err
+ }
+ return &api.GenResp{Id: uuid.String()}, nil
+}
+
+func init() {
+ config.SetProviderService(&GeneratorServerImpl{})
+}
+```
+同时,我们调整conf/dubbogo.yaml中的provider部分,
+```yaml
+dubbo:
+ registries:
+ nacos:
+ protocol: nacos
+ address: 127.0.0.1:8848
+ protocols:
+ triple:
+ name: tri
+ port: 20000
+ provider:
+ services:
+ GeneratorServerImpl:
+ interface: "" # read from stub
+```
+我们需要拉起一个依赖的注册中心,nacos,如果你有现成的,本步骤可以忽略,我们使用docker来快速启动一个nacos,
+
+```bash
+git clone https://github.com/nacos-group/nacos-docker.git
+cd nacos-docker
+docker-compose -f example/standalone-derby.yaml up
+```
+
+最后,我们启动服务端。
+```go
+export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml
+go run cmd/app.go
+```
+打开nacos的控制台,可以看到服务已经注册
+
+
+
+## 2. 客户端使用
+首先,我们可以共享我们的服务端的api给客户端,并生成相关的代码(这里可以根据实际项目需要,共享共享proto,每个consumer自行生成代码,或统一生成sdk后给依赖的服务引入)
+客户端目录如下:
+```bash
+.
+├── api
+│ ├── api.pb.go
+│ ├── api.proto
+│ └── api_triple.pb.go
+├── cmd
+│ └── client.go
+├── conf
+│ └── dubbogo.yml
+├── go.mod
+├── go.sum
+
+```
+api目录同服务端的api目录
+client.go 代码如下
+```go
+
+var grpcGeneratorImpl = new(api.GeneratorClientImpl)
+
+func main() {
+ config.SetConsumerService(grpcGeneratorImpl)
+ if err := config.Load(); err != nil {
+ panic(err)
+ }
+
+ logger.Info("start to test dubbo")
+ req := &api.GenReq{
+ AppId: "laurence",
+ }
+ reply, err := grpcGeneratorImpl.GetID(context.Background(), req)
+ if err != nil {
+ logger.Error(err)
+ }
+ logger.Infof("get id result: %v\n", reply.Id)
+}
+
+```
+
+dubbogo.yml 如下
+```yaml
+dubbo:
+ registries:
+ nacos:
+ protocol: nacos
+ address: 127.0.0.1:8848
+ consumer:
+ references:
+ GeneratorClientImpl:
+ protocol: tri
+ interface: ""
+```
+
+运行client,获取id,如下:
+
+```bash
+export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yml
+go run cmd/client.go
+……
+……
+2022-12-30T20:59:19.971+0800 INFO cmd/client.go:44 start to test
dubbo
+2022-12-30T20:59:19.982+0800 INFO cmd/client.go:52 get id result:
aafd9c73-4014-4d67-a67f-5d107105647b
+
+```
+## 3. 更多
+
+可以发现注册中心我们是使用nacos,当然,我们也可以使用其他的注册中心,更多的使用方式,可以参考[注册中心](/zh-cn/docs3-v2/golang-sdk/tutorial/develop/registry/)
+