网站建设 中企动力医院装修公司怎么做免费网站

当前位置: 首页 > news >正文

网站建设 中企动力医院,装修公司怎么做免费网站,做营销网站制作,小程序登陆官网目录 RPC 远程调用的说明作用#xff1a;像调用本地方法一样调用远程方法和直接HTTP调用的区别#xff1a;调用模型图示#xff1a; Dubbo 框架说明Dubbo Go 介绍应用 Dubbo Go环境安装#xff08;Mac 系统#xff09;安装 Go语言环境安装 序列化工具protoc安装 dubbogo-c… 目录 RPC 远程调用的说明作用像调用本地方法一样调用远程方法和直接HTTP调用的区别调用模型图示 Dubbo 框架说明Dubbo Go 介绍应用 Dubbo Go环境安装Mac 系统安装 Go语言环境安装 序列化工具protoc安装 dubbogo-cli 以及相关插件❎ 解决报错zsh: command not found: protoc-gen-go而其他两个工具都能正常输出版本号信息。解决运行 brew install protoc-gen-go 直接安装 protoc-gen-go 完成一次自己定义接口的RPC调用拉起一个注册中心-Nacos如果有现成的本步骤可忽略这里用docker快速启动一个nacos❎ 解决报错no matching manifest for linux/arm64/v8 in the manifest list entries原因如下图nacos默认不支持在ARM架构安装。只有AMD64版本的。解决去 docker hub 上搜索支持ARM架构的镜像。 服务端实现1. 创建一个IDC服务服务端项目 dubbogo-cli newApp xxx2. 定义公共接口只定义不实现api/api.proto 修改后如下3. 生成代码 api_triple.pb.go、api.pb.go 通过运行 protoc –go_out. –go-triple_out. ./api.proto4. 实现公共接口pkg/service/service.go 修改后的代码如下5. 编写 conf/dubbogo.yaml 配置6. 配置环境变量DUBBO_GO_CONFIG_PATH方式1在控制台设置 DUBBO_GO_CONFIG_PATH 环境变量方式2在代码中使用命令行参数指定配置文件路径 7. 最后启动服务端 客户端使用1. 创建一个客户端项目go mod init 客户端项目包名2. 复制服务端的api文件夹给客户端3. 构造客户端项目目录如下4. 编写 cmd/client.go 的客户端远程调用代码5. 编写 conf/dubbogo.yml 配置6. 配置环境变量DUBBO_GO_CONFIG_PATH方式1在控制台设置 DUBBO_GO_CONFIG_PATH 环境变量方式2在代码中使用命令行参数指定配置文件路径 7. 最后运行client客户端 RPC 远程调用的说明 作用像调用本地方法一样调用远程方法 和直接HTTP调用的区别 对开发者更透明减少了很多的沟通成本。RPC向远程服务器发送请求时未必要使用 HTTP 协议比如还可以用 TCP / IP性能更高内部服务更适用。 调用模型图示 注意在整个流程中最终的调用并不是由注册中心来完成的。虽然注册中心会提供信息但实际上调用方需要自己进行最后的调用动作。注册中心的作用是告诉调用方提供者的地址等信息然后调用方会根据这些信息来完成最后的调用。 为什么一定要知道注册中心的地址 因为服务提供者需要将自己提供的接口方法告知注册中心所以它必须知道注册中心的地址这样才能将自己的信息上报给注册中心所以必须要配置注册中心。同样的道理消费者调用方也需要知道注册中心的地址以便将注册中心的地址配置到项目中。 IDL是什么 IDL接口定义语言是一种约定俗成的语言用于定义接口和数据结构的语法。它是一种人为约定的语言通过这种语法可以明确地定义接口和数据的结构使各方在交流和协作时能够达成一致。这种约定的语言为不同的系统、平台或语言提供了一种统一的描述方式使得不同环境下的应用程序能够理解和交互。
Dubbo 框架说明 Dubbo 是一个开源的高性能、轻量级的分布式服务框架最初由阿里巴巴公司开发并开源。它提供了分布式服务治理、通信框架、智能负载均衡、容错策略等功能用于帮助开发者构建可扩展、高性能、松耦合的分布式应用。 Dubbo框架是目前国内非常主流的RPC实现框架。Dubbo底层用的是Triple协议Triple协议。 —— Dubbo框架官方文档 当前还有其他类似的框架比如 GRPC 和 TRPC 等等这些都是不同的 RPC 远程调用框架Dubbo 和 GRPC 是比较知名的。 Dubbo 由阿里开发而 GRPC 是由 Google 开发TRPC 则是由腾讯开发。 Dubbo Go 介绍 Dubbo Go也称为 dubbo-go是 Dubbo 框架的 Go 语言版本是一个基于 Go 语言开发的分布式服务框架用于构建高性能、可扩展的分布式应用程序。它提供了与原始 Java 版本类似的功能允许开发者使用 Go 语言构建分布式应用程序。dubbo-go 可以与 Java 版本的 Dubbo 框架无缝集成使得在混合语言环境中开发分布式系统更加便捷。 dubbo-go 提供了对 Dubbo 协议的支持允许 Go 语言服务提供者和消费者之间进行通信并利用 Dubbo 的治理能力实现服务注册、发现、负载均衡等功能。它也支持多种序列化和网络传输协议以满足不同场景的需求。 应用 Dubbo Go 环境安装Mac 系统 安装 Go语言环境 go version go 1.15。 【Go 语言官网下载地址】 安装 序列化工具protoc 使用Homebrew安装protocbrew install protobuf这将会安装 protobuf 和 protoc编译器。验证安装protoc –version如果一切正常将显示protoc的版本信息。 安装 dubbogo-cli 以及相关插件 执行以下指令安装dubbogo-cli 至 \(GOPATH/bin 控制台输入go env 可以看到GOPATH目录所在\) export GOPROXYhttps://goproxy.cn \( go install github.com/dubbogo/dubbogo-clilatest \) dubbogo-cli hello安装依赖的工具插件dubbogo-cli install all 确保上述安装的工具位于在系统环境变量内\( protoc --version libprotoc 24.2\) protoc-gen-go –version protoc-gen-go v1.31.0\( protoc-gen-go-triple --version protoc-gen-go-triple 1.0.8❎ 解决报错zsh: command not found: protoc-gen-go而其他两个工具都能正常输出版本号信息。 解决运行 brew install protoc-gen-go 直接安装 protoc-gen-go 运行下面命令For mac直接安装 protoc-gen-go然后再次运行 protoc-gen-go --version 检测正常了。 brew install protoc-gen-go完成一次自己定义接口的RPC调用 这里使用 IDL接口调用语言的方式使用dubbo创建一个公共的接口定义文件服务提供者和消费者读取这个文件。优点是跨语言。 拉起一个注册中心-Nacos如果有现成的本步骤可忽略这里用docker快速启动一个nacos Nacos 官方文档 git clone https://github.com/nacos-group/nacos-docker.git cd nacos-docker docker-compose -f example/standalone-derby.yaml up❎ 解决报错no matching manifest for linux/arm64/v8 in the manifest list entries 原因如下图nacos默认不支持在ARM架构安装。只有AMD64版本的。 解决去 docker hub 上搜索支持ARM架构的镜像。 # 下载镜像 \) docker pull nacos/nacos-server:v2.1.2-slim

查看下载的镜像

$ docker images

创建 docker-compose.yml

$ vim docker-compose.yml

启动该镜像

编写 docker-compose \( vim docker-compose.yml version: 2 services:nacos:image: nacos/nacos-server:v2.1.2-slim # 镜像nacos/nacos-server:v2.1.2-slimcontainer_name: nacos # 容器名为nacosrestart: always # 指定容器退出后的重启策略为始终重启volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录- ./data/nacos/logs:/home/nacos/logsenvironment:TZ: Asia/ShanghaiLANG: en_US.UTF-8MODE: standalone # 单机模式启动ports: # 映射端口- 8848:8848cpu_shares: 4mem_limit: 2048M启动 nacos \) docker compose up 启动成功后可以看到如下界面 可以去 nacos 注册中心看一下访问 http://自己服务的IP地址:8848/nacos/index.html 默认用户名和密码都是 nacos 服务端实现

  1. 创建一个IDC服务服务端项目 dubbogo-cli newApp xxx \( dubbogo-cli newApp IDC \) cd IDC2. 定义公共接口只定义不实现api/api.proto 修改后如下 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; }3. 生成代码 api_triple.pb.go、api.pb.go 通过运行 protoc –go_out. –go-triple_out. ./api.proto \( cd api \) protoc –go_out. –go-triple_out. ./api.proto4. 实现公共接口pkg/service/service.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{}) }5. 编写 conf/dubbogo.yaml 配置 dubbo:registries:nacos:protocol: nacosaddress: 127.0.0.1:8848protocols:triple:name: triport: 20000provider:services:GeneratorServerImpl:interface: # read from stub6. 配置环境变量DUBBO_GO_CONFIG_PATH Dubbo-go 并没有提供直接设置配置文件路径的函数。Dubbo-go 配置文件是通过环境变量 DUBBO_GO_CONFIG_PATH 或者在启动应用程序时通过命令行参数传递的。 方式1在控制台设置 DUBBO_GO_CONFIG_PATH 环境变量 export DUBBO_GO_CONFIG_PATHconf/dubbogo.yaml 方式2在代码中使用命令行参数指定配置文件路径 将 “path/to/config.yaml” 替换为实际的配置文件路径。这样你可以在运行应用程序时指定不同的配置文件路径。 package mainimport (flagfmtosdubbo.apache.org/dubbo-go/v3/config )func main() {// 使用flag包来处理命令行参数将-config参数用于指定配置文件路径configFile : flag.String(config, path/to/config.yaml, Path to Dubbo-go config file)flag.Parse()// 使用os.Setenv 设置 DUBBO_GO_CONFIG_PATH 环境变量os.Setenv(DUBBO_GO_CONFIG_PATH, *configFile)// 加载 Dubbo-go 配置if err : config.Load(); err ! nil {panic(err)}// 在这里执行你的 Dubbo-go 应用程序逻辑fmt.Println(Dubbo-go 应用程序已启动) }7. 最后启动服务端 go run cmd/app.go 打开nacos的控制台可以看到服务已经注册
    客户端使用
  2. 创建一个客户端项目go mod init 客户端项目包名
  3. 复制服务端的api文件夹给客户端
  4. 构造客户端项目目录如下 这里的api 目录与服务端的api目录保持一致。
  5. 编写 cmd/client.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) }5. 编写 conf/dubbogo.yml 配置 dubbo:registries:nacos:protocol: nacosaddress: 127.0.0.1:8848consumer:references:GeneratorClientImpl:protocol: triinterface: 6. 配置环境变量DUBBO_GO_CONFIG_PATH Dubbo-go 并没有提供直接设置配置文件路径的函数。Dubbo-go 配置文件是通过环境变量 DUBBO_GO_CONFIG_PATH 或者在启动应用程序时通过命令行参数传递的。 方式1在控制台设置 DUBBO_GO_CONFIG_PATH 环境变量 export DUBBO_GO_CONFIG_PATHconf/dubbogo.yaml 方式2在代码中使用命令行参数指定配置文件路径 将 “path/to/config.yaml” 替换为实际的配置文件路径。这样你可以在运行应用程序时指定不同的配置文件路径。 package mainimport (flagos )func main() {// 使用flag包来处理命令行参数将-config参数用于指定配置文件路径configFile : flag.String(config, path/to/config.yaml, Path to Dubbo-go config file)flag.Parse()// 使用os.Setenv 设置 DUBBO_GO_CONFIG_PATH 环境变量os.Setenv(DUBBO_GO_CONFIG_PATH, *configFile) }7. 最后运行client客户端 go run cmd/client.go