介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用

这篇具有很好参考价值的文章主要介绍了介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RPC 远程调用的说明

作用:像调用本地方法一样调用远程方法

和直接HTTP调用的区别:

  1. 对开发者更透明,减少了很多的沟通成本。
  2. RPC向远程服务器发送请求时,未必要使用 HTTP 协议,比如还可以用 TCP / IP,性能更高(内部服务更适用)。

调用模型图示:

介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用,环境配置,框架应用,macos,dubbo,golang

📢 注意:在整个流程中,最终的调用并不是由注册中心来完成的。虽然注册中心会提供信息,但实际上调用方需要自己进行最后的调用动作。注册中心的作用是告诉调用方提供者的地址等信息,然后调用方会根据这些信息来完成最后的调用。

  1. 为什么一定要知道注册中心的地址?
    因为服务提供者需要将自己提供的接口方法告知注册中心,所以它必须知道注册中心的地址,这样才能将自己的信息上报给注册中心,所以必须要配置注册中心。同样的道理,消费者调用方也需要知道注册中心的地址,以便将注册中心的地址配置到项目中。

  2. 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

  1. 使用Homebrew安装protoc:
    brew install protobuf
    
    这将会安装 protobuf 和 protoc编译器。
  2. 验证安装:
    protoc --version
    
    如果一切正常,将显示protoc的版本信息。

安装 dubbogo-cli 以及相关插件

  1. 执行以下指令安装dubbogo-cli 至 $GOPATH/bin (控制台输入go env 可以看到GOPATH目录所在)
    $ export GOPROXY="https://goproxy.cn"
    $ go install github.com/dubbogo/dubbogo-cli@latest
    $ dubbogo-cli
    hello
    
  2. 安装依赖的工具插件
    dubbogo-cli install all    
    
  3. 确保上述安装的工具位于在系统环境变量内
    $ 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版本的。

介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用,环境配置,框架应用,macos,dubbo,golang

解决:去 docker hub 上搜索支持ARM架构的镜像。

介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用,环境配置,框架应用,macos,dubbo,golang

# 下载镜像
$ 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-slim`
    container_name: nacos                                        # 容器名为'nacos'
    restart: always                                              # 指定容器退出后的重启策略为始终重启
    volumes:                                                     # 数据卷挂载路径设置,将本机目录映射到容器目录
      - ./data/nacos/logs:/home/nacos/logs
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MODE: standalone # 单机模式启动
    ports:                              # 映射端口
      - "8848:8848"
    cpu_shares: 4
    mem_limit: 2048M

启动 nacos $ docker compose up
启动成功后,可以看到如下界面:
介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用,环境配置,框架应用,macos,dubbo,golang
可以去 nacos 注册中心看一下,访问 http://自己服务的IP地址:8848/nacos/index.html
默认用户名和密码都是 nacos

服务端实现

1. 创建一个IDC服务(服务端项目), dubbogo-cli newApp xxx
$ dubbogo-cli newApp IDC
$ cd IDC
2. 定义公共接口(只定义,不实现),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.proto
4. 实现公共接口,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: nacos
      address: 127.0.0.1:8848
  protocols:
    triple:
      name: tri
      port: 20000
  provider:
    services:
      GeneratorServerImpl:
        interface: "" # read from stub
6. 配置环境变量DUBBO_GO_CONFIG_PATH

Dubbo-go 并没有提供直接设置配置文件路径的函数。Dubbo-go 配置文件是通过环境变量 DUBBO_GO_CONFIG_PATH 或者在启动应用程序时通过命令行参数传递的。

方式1:在控制台,设置 DUBBO_GO_CONFIG_PATH 环境变量
export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
方式2:在代码中,使用命令行参数指定配置文件路径

将 “path/to/config.yaml” 替换为实际的配置文件路径。这样,你可以在运行应用程序时指定不同的配置文件路径。文章来源地址https://www.toymoban.com/news/detail-695858.html

package main

import (
    "flag"
    "fmt"
    "os"

    "dubbo.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的控制台,可以看到服务已经注册
介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用,环境配置,框架应用,macos,dubbo,golang

客户端使用

1. 创建一个客户端项目,go mod init 客户端项目包名
2. 复制服务端的api文件夹给客户端
3. 构造客户端项目,目录如下:

介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用,环境配置,框架应用,macos,dubbo,golang
这里的api 目录与服务端的api目录保持一致。

4. 编写 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: nacos
      address: 127.0.0.1:8848
  consumer:
    references:
      GeneratorClientImpl:
        protocol: tri
        interface: ""
6. 配置环境变量DUBBO_GO_CONFIG_PATH

Dubbo-go 并没有提供直接设置配置文件路径的函数。Dubbo-go 配置文件是通过环境变量 DUBBO_GO_CONFIG_PATH 或者在启动应用程序时通过命令行参数传递的。

方式1:在控制台,设置 DUBBO_GO_CONFIG_PATH 环境变量
export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
方式2:在代码中,使用命令行参数指定配置文件路径

将 “path/to/config.yaml” 替换为实际的配置文件路径。这样,你可以在运行应用程序时指定不同的配置文件路径。

package main

import (
    "flag"
    "os"
)

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

到了这里,关于介绍 dubbo-go 并在Mac上安装,完成一次自己定义的接口RPC调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记一次Mac M1安装Node并且构建Vue项目的经历

    最近需要拉公司的Vue项目到本地,但是笔者作为后端人员在安装Node的过程中遇到挺多问题。所以记录一下,希望能帮到大家。 笔者运行电脑环境: Mac M1芯片版本 macos ventura 13.0.1 没有安装过node、homebrew的机器 接下来开始进入安装正题  一、安装HomeBrew 安装HomeBrew这一块一般是

    2024年01月15日
    浏览(40)
  • 记录一次M1芯片Mac折腾安装Python3的过程

    前言:是要用python搞一个跟url接口交互的脚本,来配合做服务迁移工作,但在开发和测试脚本是让python环境卡住了脖(电脑装了很多个python,并且多版本间管理的比较混乱)所以想先调试好一个版本 能用就好;并且脚本用到requests库,需要给python安装一下。 总结两件事: 装

    2024年02月16日
    浏览(33)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(60)
  • Mac电脑上如何安装最新版本的Go

    在Mac电脑上安装最新版本的Go语言环境,可以遵循以下步骤: 访问官方网站 https://golang.org/dl/ ,下载适合Mac系统的压缩包。建议选择最新版本的64位压缩包。     下载完成后双击打开压缩包,并将解压出来的文件夹重命名为\\\"go\\\",并移动到你喜欢的位置(如 /usr/local 目录下)。

    2024年02月14日
    浏览(47)
  • 使用GO编译wasm文件并在nodejs中使用

    1. 原生JS直接计算 2. 原生GO直接计算 3. GO打包成WASM包由JS进行调用 GO文件 打包命令: GOOS=js GOARCH=wasm go build -o ./fibonacci.wasm fibonacci.go 调用was_exec.js文件完成WebAssembly运行时环境初始化 JS调用wasm文件执行 4. TinyGo打包成wasm包运行 Go文件 打包命令 tinygo build -o tinygo_fibonacci.wasm -targe

    2024年02月13日
    浏览(36)
  • 记一次dubbo消费者注册失败找不到服务提供者问题

    项目分多套环境,其中一套环境重新部署时,频繁出现消费者找不到服务提供者的错误 经过多次重启后才有可能恢复正常,而其他环境并没有发现此问题 怀疑点: 1.消费者和服务提供者dubbo版本对不上 2.服务提供者没有注册上服务 3.注册中心有问题 逐一排查: 1.消费者和服

    2023年04月18日
    浏览(40)
  • 从GitHub上新拉一个项目并在mac系统下运行遇到的种种问题

    如果项目已经被拉下来,现在我们要启动项目。 step1、需要了解该项目是什么,它的作用是什么,以及它可以解决的问题。阅读项目的介绍、文档和示例,确保对项目有一个基本的认识。 step2、设置开发环境:确保您的开发环境中安装了所需的工具和软件,例如文本编辑器(

    2024年02月11日
    浏览(56)
  • 干翻Dubbo系列第十二篇:Dubbo协议介绍

    文章目录 文章说明 一:Dubbo协议 1:Dubbo协议简介 2:Dubbo协议优点  3:Dubbo协议帧的组成 (一):幻数 (二):2Way (三):event (四):Serilization ID (五):status (六):RequestID (七):数据长度         Rpc过程当中三个核心的要素就是: 协议、序列化 、通信方式         Dubbo协议

    2024年02月12日
    浏览(39)
  • Docker的相关知识介绍以及mac环境的安装

    大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题: 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 Docker就是来解决这些问题的。Docker是一个快速交付应用、运行应用的技术:可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移

    2024年02月05日
    浏览(39)
  • 【go-zero】go-zero阿里云oss 前端上传文件到go-zero API服务 并在k8s pod中创建文件 并推送到阿里云oss 最佳实践

    问题:在本地通过上传文件,然后将文件推送到aliyun的oss中,是没问题的 但是部署到了k8s中,则出现了问题,一直报错没有创建的权限 思路:开始认为应该将该文件挂载到configmap中,然后通过这种方式修改了deployment和dockerfile。最终发现应该是go的创建文件路径方式搞错了,

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包