Skip to main content

Command Palette

Search for a command to run...

Dubbogo入门

Published
1 min read

鉴于我司java技术栈为主这个事实,go作为小众,为了使用公司的dubbo基础设施,只有三条路可以走:

  1. 让dubbo应用开发者提供http协议接口(你确定别人愿意花额外的时间干这件事?),此路不通;
  2. 自己用java开发一个http网关,将dubbo接口以http方式暴露出来,也不是不行,但java真的不熟,要是熟,也就不必开发这个网关了;
  3. 直接使用go开发dubbo接口的consumer,dubbogo支持这种方式

虽然不是一个绝对的外行,但对于dubbo的一些基本概念还是要理清楚的,一图胜千言 dubbo-arch

  1. 通常zk作为图中的Registry,为服务发现之中
  2. Provider自然就是java提供的dubbo接口了
  3. Consumer就是go写的dubbo调用方了

dubbogo是dubbo的golang实现,由此我们可以使用go作为Consumer,调用java写的dubbo接口方法,为了方便观察,我在本地启动了一个dubbo-server、zk以及dubbo-admin

docker-compose配置如下所示:

# refer:https://github.com/apache/dubbo-admin/blob/develop/docker/stack.yml
version: '3'

services:
  zookeeper:
    image: zookeeper
    ports:
      - 2181:2181
  admin:
    image: apache/dubbo-admin:0.3.0
    depends_on:
      - zookeeper
    ports:
      - 8080:8080
    environment:
      - admin.registry.address=zookeeper://zookeeper:2181
      - admin.config-center=zookeeper://zookeeper:2181
      - admin.metadata-report.address=zookeeper://zookeeper:2181

用IDEA启动dubbo-server端:https://github.com/apache/dubbo-go-samples/tree/master/generic/java-server/2.7,记住项目编译版本一定要选择java8(不要问了怎么知道的),打开dubbo-admin(用户名密码均为:root),此时可以顺利看到服务注册信息

image.png dubbo-server

这说明dubbo服务端启动成功且成功将自身信息注册到了zk,下一步我们启动go客户端:https://github.com/apache/dubbo-go-samples/tree/master/generic/go-client

CONF_CONSUMER_FILE_PATH=conf/client.yml go run cmd/client.go

没有明显的报错,我们可以调用是成功的,如果你有注意到IDEA这边的日志,可以发现go客户端的调用确实是成功的,问题在于dubbo-admin这里的信息发生了变化

image.png dubbo-client

从现象看就是go consumer的注册信息“覆盖”了java provider的信息,当然,这是表象,如果真的覆盖,go consumer的调用不可能成功的,我们查看一下zk里面的注册信息

[zk: localhost:2181(CONNECTED) 2] ls /
[dubbo, zookeeper]

看看dubbo目录

[zk: localhost:2181(CONNECTED) 3] ls /dubbo
[config, org.apache.dubbo.UserProvider]

进到UserProvider中

[zk: localhost:2181(CONNECTED) 7] ls /dubbo/org.apache.dubbo.UserProvider
[configurators, consumers, providers, routers]

查看providers

[zk: localhost:2181(CONNECTED) 8] ls /dubbo/org.apache.dubbo.UserProvider/providers
[dubbo%3A%2F%2F192.168.199.182%3A20010%2Forg.apache.dubbo.UserProvider%3Fanyhost%3Dtrue%26application%3Duser-info-server%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26group%3Das%26interface%3Dorg.apache.dubbo.UserProvider%26methods%3DGetErr%2CGetUserMap%2CgetUser%2CCalc%2CSum%2CGetUsers%2CGetUser3%2CqueryAll%2CGetUser0%2CisLimit%2CqueryUser%2CGetUser%26pid%3D83008%26release%3D2.7.7%26revision%3D2.0%26side%3Dprovider%26timeout%3D3000%26timestamp%3D1631543281615%26version%3D2.0, dubbo%3A%2F%2F192.168.199.182%3A20010%2Forg.apache.dubbo.UserProvider%3Fanyhost%3Dtrue%26application%3Duser-info-server%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26interface%3Dorg.apache.dubbo.UserProvider%26methods%3DGetErr%2CGetUserMap%2CgetUser%2CCalc%2CSum%2CGetUsers%2CGetUser3%2CqueryAll%2CGetUser0%2CisLimit%2CqueryUser%2CGetUser%26pid%3D83008%26release%3D2.7.7%26revision%3D2.0%26side%3Dprovider%26timeout%3D3000%26timestamp%3D1631543281714%26version%3D2.0, dubbo%3A%2F%2F192.168.199.182%3A20010%2Forg.apache.dubbo.UserProvider%3Fanyhost%3Dtrue%26application%3Duser-info-server%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26interface%3Dorg.apache.dubbo.UserProvider%26methods%3DGetErr%2CGetUserMap%2CgetUser%2CCalc%2CSum%2CGetUsers%2CGetUser3%2CqueryAll%2CGetUser0%2CisLimit%2CqueryUser%2CGetUser%26pid%3D83008%26release%3D2.7.7%26side%3Dprovider%26timeout%3D3000%26timestamp%3D1631543280655]

可以看到java provider的信息完好无损,在git上找到一条关联issue,结论是:dubbo-admin展示逻辑问题,所以dubbogo目前为止可用,但是在dubbo-admin上的注册信息显示有问题,目前这个我还没有解决,毕竟dubbo-admin上可以在线调试dubbo接口,如果因为dubbo-go的调用而更改了注册信息,这也太不友好了,目前对dubbo-go的评价:能用!

关于dubbo-admin的展示问题,可以通过在reference config 中增加如下配置即可解决;

params:
  category: "consumers"

其它使用问题,等踩完坑陆续补充


参考:

  • https://github.com/apache/dubbo-admin/issues/762
8 views

More from this blog

2025: 祛魅 灰度 念头通达

今天是2025年的最后一天,当大家都在准备下班的时候,好巧不巧的,我刚好发现了一个不大不小的问题,大胆猜想,小心求证,向上反馈,暴露风险,作为2025年工作注解,实在是再有趣不过了。 今年的工作,从结果上看,还算平稳,至于过程,有太多不可言说的部分。厂里打镙丝的牛马,有工资可拿,理应知足了,至于其它的,与己无关,也没那么重要了。 祛魅 近距离观察大厂,才发现一些违背常识/直觉的事实:路人以为的高大

Feb 28, 20261 min read21

大厂祛魅:破碎的专注力

毁掉一个人最直接的方法,就是毁掉ta的专注力。 这句话的出处已然模糊,但放在大厂环境中,却显得格外深刻。 围城 大厂宛如一座围城。城外的人满怀憧憬,目之所及皆是光鲜;城内的人却如困笼之鸟,翅膀日渐退化,每日挣扎求生。 高大上 不可否认,大厂的硬件设施确实令人艳羡:宽敞的独立园区内,来往穿梭的人群中,几乎人人手握智能设备。这看似现代化的景象背后,却藏着一个无奈的事实:在工作时段,每台电脑都被严密监控,连听音乐都成奢望。于是,工作之余玩手机,成了许多人难得的解压方式。 大厂的品牌效应确实强大。外界对...

Jul 29, 20251 min read138

Black Swan

黑天鹅理论 是指极不可能发生,实际上却又发生的事件 来到大厂打工已经满一个月了,从一开始的手足无措,到逐渐度过不适期,也算是适应了吧。 不适应 刚入职时,不适应的地方还是挺多的。 第一次只使用台式机工作,这就限制了我一天中的绝大部分时间,都必须呆在自己的工位上,好在工位足够大。只是人与人的沟通少了很多,有问题只能在工位上通过 IM 呼对方,有种魔幻又现实的感觉 第一次只能用 Windows,也不能 WSL,这给我的工作效率带来了很大影响,不能用熟悉的软件,就连写代码用的 VSCode 的...

Jan 24, 20251 min read74

2024年: 逐渐平静

这个世界是一面镜子,会把你的感受反射给你 2024 开端: 相由心生 那时,还带着一着愤懑,因为拿到了低绩效,虽然内心知道这是公司经营困难,想让我离开的一种策略,但仍然感受到自己那可笑的自尊受到了践踏。自那之后,非必要不加班,只做份内事,尽可能地不去涉及份外之事。 2024 年中: 与人为善 组里的项目眼见不行了,我被迫去支援 AI 项目,久违地写起了 python,项目接近完成时,意外收到通知:我拿到大礼包了。在这之前,架构师因故裸辞。在我离开之后不到两周,我的 TL 也裸辞了,直到同事告诉...

Jan 9, 20251 min read92

企业软件之殇

殇 动词 未成年而死。 名词 战死者。 笔者经历了两家打着云原生旗号的企业软件/解决方案公司,都是中途加入,项目都以解(失)散(败)告终。 云原生解决方案 NB 公司:一个传统的 IDC 小厂,想着借云原生的热度,进军企业软件市场。 在加入这个项目之前,笔者考取了 CKAD 认证,彼时对 K8s 相当着迷。先简要介绍一下这个项目背景: 基于 Rancher (换皮肤)的二次开发项目,名字叫:HCaaS ,在笔者加入这个团队之前,项目已经开发近两年了,除了 TL 之外,其它人之前都...

Jul 1, 20241 min read103

just for fun

57 posts

I'm a Software Engineer