在Mac上安装及使用 dubbo-go

news2025/3/10 5:26:40

目录

  • dubbo-go 是什么
  • dubbo-go 快速入门
  • 环境安装(Mac 系统)
    • 安装 Go语言环境
    • 安装 序列化工具protoc
    • 安装 dubbogo-cli 以及相关插件
      • 解决报错:`zsh: command not found: protoc-gen-go`,而其他两个工具都能正常输出版本号信息。
  • 完成依次自己定义接口的RPC调用
    • 服务端实现
      • 1. 首先使用 dubbogo-cli 创建 IDC 服务
      • 2. 编辑proto定义我们的接口,目录 api/api.proto 修改后如下:
      • 3. 生成代码
      • 4. 调整service目录:pkg/service/service.go 修改后的代码如下
      • 5. 调整 conf/dubbogo.yaml 中的provider部分
      • 6. 拉起一个依赖的注册中心,nacos,如果你有现成的,本步骤可以忽略,我们使用docker来快速启动一个nacos。
        • 解决报错:`no matching manifest for linux/arm64/v8 in the manifest list entries`
      • 7. 最后,启动服务端

dubbo-go 是什么

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,而其他两个工具都能正常输出版本号信息。

运行下面命令(For mac)直接安装 protoc-gen-go,然后再次运行 protoc-gen-go --version 检测正常了。

brew install protoc-gen-go

完成依次自己定义接口的RPC调用

服务端实现

1. 首先使用 dubbogo-cli 创建 IDC 服务

$ dubbogo-cli newApp IDC
$ cd IDC

2. 编辑proto定义我们的接口,目录 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. 生成代码

$ cd api
$ protoc --go_out=. --go-triple_out=. ./api.proto

4. 调整service目录: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 中的provider部分

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. 拉起一个依赖的注册中心,nacos,如果你有现成的,本步骤可以忽略,我们使用docker来快速启动一个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-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
    启动成功后,可以看到如下界面:
    在这里插入图片描述
    可以去 nacos 注册中心看一下,访问 http://自己服务的IP地址:8848/nacos/index.html
    默认用户名和密码都是 nacos

7. 最后,启动服务端

export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
go run cmd/app.go  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/965191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[贪心] 拼接最小数

这道题思路并不难&#xff0c;我主要想学习其一些对于字符串的处理。 代码如下&#xff1a; #include <iostream> #include <string> #include <algorithm> using namespace std;const int MAXN 10000; string nums[MAXN];bool cmp(string a, string b) {…

Java当中的object介绍以及相关方法介绍

文章目录 前言 1. object介绍 1.1 简单介绍 1.2 object的相关方法 2. object相关方法的介绍 2.0 JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别 2.1 Object之wait 2.1.1 另外两种wait方法 2.1.2 Object中notify&#xff0c;notify…

STM32f103入门(8)TIM输入捕获输入捕获测频率PWMI测占空比

TIM输入捕获 频率测量输入捕获基本结构PWMI基本结构主从触发模式输入捕获测量频率PWMI测占空比 频率测量 输入捕获基本结构 CNT计数一个周期&#xff0c;转运到CCR1里面去&#xff0c;CNT0 这时候CCR1N FxFc/N Fc cnt的驱动时钟 这时候就可以得到频率 Fc72M/PSC PWMI基本结构 …

STM32微控制器的低功耗模式

STM32微控制器的低功耗模式(Low-power modes):Sleep mode、Stop mode 和 Standby mode。 1.1 Sleep Mode(睡眠模式): 把STM32微控制器当作一位劳累的工人,他在工作过程中需要短暂的休息。在Sleep模式下,微控制器会关闭一部分电路,减小功耗,但仍然保持对中央处理单…

【Spring Boot】通过AOP拦截Spring Boot日志并将其存入数据库

文章目录 前言摘要AOP介绍AOP的实现添加依赖配置数据库连接定义日志实体类定义日志拦截器使用AOP拦截日志并保存到数据库中 代码方法介绍测试用例全文小结 前言 在软件开发中&#xff0c;常常需要记录系统运行时的日志。日志记录有助于排查系统问题、优化系统性能、监控操作行…

滑动窗口和双指针

滑动窗口和双指针 一、循环不变量1.1 定义1.2 总结 二、使用循环不变量写对代码2.1 注意2.2 总结 三、滑动窗口3.1 固定长度的滑动窗口&#xff08;同向交替移动的两个变量&#xff09;3.2 不定长度的滑动窗口3.2.1 定义3.2.2 总结 3.3 计数问题3.3.1 标准3.3.2 总结 3.4 使用数…

three.js(一)创建场景添加物体

目录 前言 一、创建Three世界 1.导入Three.js 2.引入three 3.创建基本结构 4.创建场景、相机、渲染器 场景 相机 渲染器 二、向场景中存放物体 1.创建一个物体 几何体 材质 网格模型 前言 官方网站https://threejs.org/网站目录翻译 文档连接https://threejs.org/…

postgresql-条件表达式

postgresql-条件表达式 简单Case表达式搜索Case表达式缩写函数总结 简单Case表达式 select e.first_name , e.last_name , e.department_id , case e.department_id when 90 then 管理when 60 then 开发else 其他end as "部门" from cps.public.employees e ;-- 统…

JavaWeb 文件上传和下载

目录 一、文件上传 1.文件上传和下载的使用说明 : 2.文件上传基本原理 : 3.文件上传经典案例 : 3.1 页面实现: 3.2 servlet实现 : 3.3 工具类实现 : 3.4 运行测试 : 3.5 注意事项 : 二、文件下载 1.文件下载基本原理 : 2.文件下载经典案例 : 2.1 准备工作 2.2 页面…

2022年03月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:多项式相加 我们经常遇到两多项式相加的情况, 在这里, 我们就需要用程序来模拟实现把两个多项式相加到一起。 首先, 我们会有两个多项式,每个多项式是独立的一行, 每个多项式由系数、 幂数这样的多个整数对来表示。 如多项式 2…

专业的视觉特效处理包,FxFactory 8 Pro for Mac助您打造精彩视频

FxFactory 8 Pro for Mac是一款强大的视觉特效处理包&#xff0c;专门为Mac用户设计。它集成了超过200种高质量的视觉效果和过渡效果&#xff0c;可以轻松地应用于各种视频项目中。该软件提供了一个直观的界面&#xff0c;用户可以通过简单拖放操作将特效应用到视频片段上。它支…

【golang】调度系列之goroutine

前面的两篇&#xff0c;从相对比较简单的锁的内容入手(也是干货满满)&#xff0c;开始了go的系列。这篇开始&#xff0c;进入更核心的内容。我们知道&#xff0c;go应该是第一门在语言层面支持协程的编程语言(可能是我孤陋寡闻)&#xff0c;goroutine也完全算的上是go的门面。g…

[SpringBoot3]博客管理系统(源码放评论区了)

八、博客管理系统 创建新的SpringBoot项目&#xff0c;综合运用以上知识点&#xff0c;做一个文章管理的后台应用。依赖&#xff1a; Spring WebLombokThymeleafMyBatis FrameworkMySQL DriverBean Validationhutool 需求&#xff1a;文章管理工作&#xff0c;发布新文章&…

Web安全——穷举爆破上篇(仅供学习)

Web安全 一、概述二、常见的服务1、burpsuite 穷举后台密码2、burpsuite 对 webshell 穷举破解密码3、有 token 防御的网站后台穷举破解密码3.1 burpsuite 设置宏获取 token 对网站后台密码破解3.2 编写脚本获取token 对网站后台密码破解 4、针对有验证码后台的穷举方法4.1 coo…

华为云云服务器评测 [Vue3 博物馆管理系统] 使用Vue3、Element-plus菜单组件构建轮播图

系列文章目录 第一章 定制上中下&#xff08;顶部菜单、底部区域、中间主区域显示&#xff09;三层结构首页 第二章 使用Vue3、Element-plus菜单组件构建菜单 第三章 使用Vue3、Element-plus菜单组件构建轮播图 [第四章 使用Vue3、Element-plus菜单组件构建组图文章] 华为云云…

WebSocket(一)

一.什么是WebSocket 【1】WebSocket是一种协议&#xff0c;设计用于提供低延迟&#xff0c;全双工和长期运行的连接。 全双工&#xff1a;通信的两个参与方可以同时发送和接收数据&#xff0c;不需要等待对方的响应或传输完成。 【2】比较 传统通信&#xff08;http协议&am…

QML与C++的交互操作

QML旨在通过C 代码轻松扩展。Qt QML模块中的类使QML对象能够从C 加载和操作&#xff0c;QML引擎与Qt元对象系统集成的本质使得C 功能可以直接从QML调用。这允许开发混合应用程序&#xff0c;这些应用程序是通过混合使用QML&#xff0c;JavaScript和C 代码实现的。除了从QML访问…

15年检测生涯转瞬即逝,复旦MBA助力邢国芒实现质量强国梦

日月光华&#xff0c;旦复旦兮&#xff01;复旦MBA如同一个巨大的磁场&#xff0c;吸引了诸多来自五湖四海、各行各业的职场精英。从初入职场的青涩懵懂到如今的独当一面专业干练&#xff0c;他们逐渐成长为职场的中坚力量&#xff0c;在各自领域内发光发热。作为新时代的青年&…

多线程应用——阻塞队列

阻塞队列 文章目录 阻塞队列1.队列的概念2.阻塞队列3.现实中的例子4.消息队列5.使用队列的优势1.解耦2.削峰填谷3.异步操作 6.实现 1.队列的概念 一种先进先出的数据结构 2.阻塞队列 队列写元素是从队尾插入&#xff0c;从对头取出 当插入元素时&#xff0c;先判断一下队列…

数据治理-数据管理框架

DMBOK2提出的想法和概念在不同的组织中都可以应用&#xff0c;组织所采用的数据管理方法取决于某些关键要素&#xff0c;如其所处行业、所应用的数据范围、企业文化、成熟度、战略、愿景以及待解决的问题和挑战。 战略一致性模型和阿姆斯特丹模型&#xff0c;展示了组织管理数…