网站建设企业网银e路通,赤峰市网站建设培训,amp for wordpress,现在注册一个公司要多少钱文章说明
本文内容整理自《孙哥说Dubbo系列视频课程》#xff0c;孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频#xff0c;或者直接添加老师微信号suns45与他直接联系
一#xff1a;序列化概念
补充说明#xff1a; Kyro和Fst这两种…文章说明
本文内容整理自《孙哥说Dubbo系列视频课程》孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频或者直接添加老师微信号suns45与他直接联系
一序列化概念
补充说明 Kyro和Fst这两种优秀的序列化方案都是适用于Java体系换句话说换个Go语言编写的端就不好使了。
ProtoBuf这中序列化方式可以支持其他的语言。Java、go、php都是可以支持的。GRPC另外一种RPC的底层实现方式。
二ProtoBuf序列化方式
1引入依赖
(一)ProtoBuf依赖 dependencygroupIdcom.google.protobuf/groupIdartifactIdprotobuf-java/artifactIdversion3.22.2/version/dependencydependencygroupIdcom.google.protobuf/groupIdartifactIdprotobuf-java-util/artifactIdversion3.22.2/version/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-serialization-protobuf/artifactIdversion2.7.23/versionexclusionsexclusionartifactIddubbo-common/artifactIdgroupIdorg.apache.dubbo/groupId/exclusionexclusionartifactIddubbo-serialization-api/artifactIdgroupIdorg.apache.dubbo/groupId/exclusionexclusionartifactIdprotobuf-java/artifactIdgroupIdcom.google.protobuf/groupId/exclusionexclusionartifactIdprotobuf-java-util/artifactIdgroupIdcom.google.protobuf/groupId/exclusion/exclusions/dependency/dependenciesbuildextensionsextensiongroupIdkr.motd.maven/groupIdartifactIdos-maven-plugin/artifactIdversion1.7.1/version/extension/extensionspluginsplugingroupIdorg.xolstice.maven.plugins/groupIdartifactIdprotobuf-maven-plugin/artifactIdversion0.6.1/versionconfigurationprotocArtifactcom.google.protobuf:protoc:3.22.2:exe:${os.detected.classifier}/protocArtifactoutputDirectory${basedir}/src/main/java/outputDirectoryclearOutputDirectoryfalse/clearOutputDirectoryprotocPluginsprotocPluginiddubbo/idgroupIdorg.apache.dubbo/groupIdartifactIddubbo-compiler/artifactIdversion0.0.2/versionmainClassorg.apache.dubbo.gen.dubbo.Dubbo3Generator/mainClass/protocPlugin/protocPlugins/configurationexecutionsexecutiongoalsgoalcompile/goalgoalcompile-custom/goal/goals/execution/executions/plugin/plugins/build
protobuf-java、protobuf-java-uitl这两个是Dubbo项目支持Protobuf的话这两个依赖是必有的。dubbo-serialization-protobuf这个是ProtoBuf的序列化依赖。需要排除自带的Dubbo依赖。另外还需要把java和util这两个依赖给排除掉。
此依赖配置是放到父项目的Pom.xml里边。
(二解决依赖编译问题
Consumer和provider之间是通过网络进行通信的两者有可能不同的语言编写的。那两者通信的时候都得将数据转换为ProtoBuf这种中间格式来进行通讯。这样就做到了跨语言的数据传输。一旦应用了ProtoBuf这种序列化方式。
ProtoBuf作为数据传输的中间格式一旦应用了ProtoBuf作为序列化方式的。IDL是ProtoBuf作为中间的格式是ProtoBuf的特有的预发里边都称之为Message。这里边涉及到一个编译的问题需要使用ProtoC进行编译使用ProtoC进行编译的话有两种使用方式。1是直接本地安装protoC另外一种是使用maven插件的方式。我们maven插件即可。
应用这个插件的时候我们需要注意这个版本必须与上述的protobuf-java版本保持一致使用MAC操作系统的话其中的版本不能低于3.17.3低于这个版本是对这个苹果的ARM架构是不支持的。Nacos是也有这个问题
2ProtoBuf⽂件的编写
ProtoBuf作为序列化方案需要有一个传输数据的中间类型这个中间类型就是ProtoBuf里边的IDL这个IDL大致有三块内容参数请求数据返回值返回参数这是两个非常核心的内容也称之为Message。
当然还有第三个内容那就是服务接口。服务接口沟通了Provider和Confumer一个基于服务接口提供实现另外一个通过服务接口创建代理。如果基于ProtoBuf来实现序列化的话那么这个服务接口也需要在定义在IDL当中的。
ProtoBuf的IDL是.protobuf的这样的一个文件。首先我们使用的语法是proto3三个Java配置可选项。
这个文件叫做HelloService.proto放到与API项目下和Java平级的proto目录下。这个将来会被consumer和provider共用。
然后这个proto文件会被protoC插件翻译成Java类。
syntax proto3;生成的Java类放到不同的文件里
option java_multiple_files true;
生成的代码放到那个包下
option java_package com.suns;
最外层的类叫什么名字
option java_outer_classname HelloProtocol;message HelloRequest {
string name 1;
}
message HelloResponse {
string result 1;
}
service HelloService {
rpc sayHello (HelloRequest) returns (HelloResponse);
}
3ProtoC生成的Java接口
public class HelloServiceImpl implements HelloService {Overridepublic HelloResponse sayHello(HelloRequest request) {System.out.println(HelloServiceImpl.sayHello request request.getName());return HelloResponse.newBuilder().setResult(this is sayHello result).build();}//异步的Overridepublic CompletableFutureHelloResponse sayHelloAsync(HelloRequest request) {return CompletableFuture.completedFuture(sayHello(request));}
}
4XML的配置方式
dubbo:protocol namedubbo port-1 serializationprotobuf/
bean idhelloService classcom.suns.service.HelloServiceImpl/
dubbo:service interfacecom.suns.HelloService refhelloService/
5Boot的配置方式
dubbo:protocol:name: dubboport: -1serialization: protobuf
6Consumer端调用
dubbo:reference interfacecom.suns.service.HelloService idhelloSe
rvice
urldubbo://192.168.50.62:20880/com.suns.HelloServic
e?serializationprotobuf/ 7Boot的方式
DubboReference(url dubbo://192.168.50.62:20880/com.suns.HelloServi
ce?serializationprotobuf)