dubbogo-1 基础rpc服务

文章目录

基本环境处理

https://cn.dubbo.apache.org/zh-cn/overview/quickstart/go/install/

这里没有 protoc-gen-go --version

执行

bash 复制代码
 go get -u github.com/golang/protobuf/protoc-gen-go

进入到这个目录执行

bash 复制代码
go build
bash 复制代码
go install

这样就会出现在 go/bin 目录里面了,如果已经增加了这个环境变量了,就可以使用该命令了

分别验证

bash 复制代码
protoc --version

libprotoc 22.2

bash 复制代码
protoc-gen-go-triple --version

protoc-gen-go-triple 1.0.8

bash 复制代码
protoc-gen-go --version

protoc-gen-go: unknown argument "--version" (this program should be run by protoc, not directly)

这个错误先不管。

编译pb接口

bash 复制代码
protoc --go_out=. --go-triple_out=. ./samples_api.proto
  • --go_out=. 用到protoc-gen-go插件,生成文件到当前目录
  • --go-triple_out=. 使用 protoc-gen-go-triple插件,生成文件到当前目录

当然默认的样例工程其实已经包含了编译好的文件

开启rpc调用

回到项目根目录

bash 复制代码
go mod tidy

分别启动server端和client端

bash 复制代码
cd go-server/cmd
bash 复制代码
go run .
bash 复制代码
cd go-client/cmd
bash 复制代码
go run .

服务端效果

客户端效果

业务观察

这个的提供的样例模块

protoc的定义是

protoc 复制代码
message HelloRequest {
  string name = 1;
}

翻译出来的go代码对应核心的地方就是这里

client代码增加注释

go 复制代码
package main

import (
	"context"
)

import (
	"dubbo.apache.org/dubbo-go/v3/common/logger"
	"dubbo.apache.org/dubbo-go/v3/config"
	_ "dubbo.apache.org/dubbo-go/v3/imports"

	"helloworld/api"
)

// 创建一个grpc的实例
var grpcGreeterImpl = new(api.GreeterClientImpl)

// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yaml
func main() {
	config.SetConsumerService(grpcGreeterImpl)
	if err := config.Load(); err != nil {
		panic(err)
	}

	logger.Info("start to test dubbo")
	// 传递参数
	req := &api.HelloRequest{
		Name: "laurence",
	}
	// grpc的调用
	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
	if err != nil {
		logger.Error(err)
	}
	logger.Infof("client response result: %v\n", reply) // reply是具体响应的信息
}

qa1 能取出protoc里面的字段值吗?

可以直接用reply.xxx 取值

go 复制代码
package main

import (
	"context"
)

import (
	"dubbo.apache.org/dubbo-go/v3/common/logger"
	"dubbo.apache.org/dubbo-go/v3/config"
	_ "dubbo.apache.org/dubbo-go/v3/imports"

	"helloworld/api"
)

// 创建一个grpc的实例
var grpcGreeterImpl = new(api.GreeterClientImpl)

// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yaml
func main() {
	config.SetConsumerService(grpcGreeterImpl)
	if err := config.Load(); err != nil {
		panic(err)
	}

	logger.Info("start to test dubbo")
	// 传递参数
	req := &api.HelloRequest{
		Name: "laurence",
	}
	// grpc的调用
	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
	if err != nil {
		logger.Error(err)
	}
	logger.Infof("client response result: %v\n", reply) // reply是具体响应的信息
	logger.Infof("Name is %v \n", reply.Name)
	logger.Infof("Age is %v \n", reply.Age)
	logger.Infof("Id is %v \n", reply.Id)
}
相关推荐
minji...13 分钟前
Linux 网络套接字编程(六)TCP的通信是全双工的,自定义协议的定制,序列化和反序列化
linux·运维·服务器·网络·c++
(Charon)25 分钟前
【C++/Qt】Qt 实现 TCP Client:从功能构思到消息收发与日志保存
qt·网络协议·tcp/ip
hhb_61826 分钟前
Tcl脚本自动化运维实操落地案例详解
运维·网络·自动化
老王谈企服1 小时前
流程型制造业生产优化,未来将如何被大模型技术重构?2026智造深研:实在Agent驱动端到端生产闭环
大数据·网络·人工智能·ai·重构
Albert Edison1 小时前
【RabbitMQ】RPC 通信(使用案例)
分布式·rpc·rabbitmq
YaBingSec1 小时前
玄机网络安全靶场:GeoServer XXE 任意文件读取(CVE-2025-58360)
java·运维·网络·安全·web安全·tomcat·ssh
VBsemi-专注于MOSFET研发定制1 小时前
面向高可靠与快速响应需求的高端报警系统功率MOSFET选型策略与器件适配手册
网络·人工智能
默 语1 小时前
AI Agent 数据感知层实战:网络端点定位在跨境电商、金融风控、自动化营销中的技术实现
网络·人工智能·自动化
科技牛牛1 小时前
IP数据成新商业资源:如何合理利用IP地址进行精准营销
网络·运营·查询ip所在地·ip广告营销·ip数据
想成为优秀工程师的爸爸1 小时前
第二十四篇技术笔记:郭大侠学DoIP - 从“偶睡破庙”到“天字一号”
网络·笔记·网络协议·tcp/ip·信息与通信