# Dubbo3Test **Repository Path**: boying52/dubbo3-test ## Basic Information - **Project Name**: Dubbo3Test - **Description**: java db3 与go互通 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-27 - **Last Updated**: 2024-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

关于Dubbo3中Java与Go互通

1. 背景

Go的优势是区块链领域,Java的优势是互联网领域,而Python的优势是智能及数据领域。结合多种语言的特性 ,结合各方具有的优势,可以提高效率,灵活的解决问题。目前正在落实JAVA、GO、PYTHON的互联互通。


目前只完成Java与Go的互通,后续会完成Python的互通。使之成为高效,灵活的解决方案。


Dubbo3与Grpc仅是分布式中的一个子集。高并发,低延时,高扩展与人工智能及将来的发展越来越同频。应当尽量减少内部的损耗并不会带来后遗症。当然上述能完成的事,http1.1也能完成。 正如新能源能开的路,油车也能开一样。举例:当Go处理区块链业务逻辑时,可以高并发减少损耗的无缝访问各语言的辅助优势如:Python的Langchain、数据分析及智能服务,Java的生态会发生什么。

2.前置条件

1.关于dubbo3中java及go的具体使用,请参考https://cn.dubbo.apache.org/zh-cn/overview/home/
2.要异构语言互通,需要了解协议、序列化、反序列化等。
3.工具准备
protoc工具可以根据你编写的proto文件生成对应的代码,protoc-gen-go工具可以生成golang版本的代码,protoc-gen-go-triple工具可以生成dubbo3的go代码。 protoc的java支持很友好,举例生成示例:

proto:

syntax = "proto3";
//生成go文件到制定目录;指定包名 ./;userinfo
//默认包名userService
option java_package = "org.dub.api.entity";
option java_outer_classname = "UserinfoProto";
option java_multiple_files = true;
option go_package = "./;entity";

//package userinfo;
//protoc --go_out=. *.proto
//protoc --go_out=.   --go-triple_out=. *.proto
//protoc --java_out=. *.proto
message Userinfo {
string username = 1;
int32 age = 2;
//切片
repeated string hobby = 3;
PhoneType phonetype = 4;
}
message HelloRes {
string name = 1;
}
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}

Java:

protoc --java_out=. *.proto;

Go:

protoc --go_out=.   --go-triple_out=. *.proto

解释Java与Go的细节

Protobuf在Java中生成的是实体类,至于proto文件中service的接口,java是以pojo的方式实现,但在Go中,需要参数go_out生成 实体,再用go-triple_out生成service接口。所以这个proto文件需要适配多种语言。显然经过时间的积累,protobuf已经 非常成熟,在各种语言中都支持。我们可以写一个文件gen anywhere in anylanguage。
此代码结构简单,maven类库经过筛选,配置信息正确,zookeeper请自行安装。
java代码:https://gitee.com/boying52/dubbo3-test
java代码中请启动ProviderApplicaiton作为java dubbo server,
其中consumer模块中的test是java生态可以调用,go代码是异构语言调用。

go代码: https://gitee.com/boying52/dubbo2javaserver
go代码中请启动main.go