Dubbo 入门示例

Dubbo 是一个分布式服务架构的工具,而且与 Spring 很好的集成,就把他理解为 RMI(Remote Method Invoke 远程方法调用)的框架吧……

上学期的《软构建与中间件》课程中 EJB 相关内容就涉及到 RMI 的内容,因此还是可以接受这个概念的,客户端明明调用的是接口,那到底是谁实现的呢?这个就不用客户端来操心了,客户端只需要获取到接口实例,调用它的方法达到自己的目的就行了。

下面是根据官方文档写的 Dubbo 的一个 Hello World 示例。

项目结构

使用 Maven 作为构建工具,项目结构如下:

我分为了三个模块,一个 api, 一个 provider, 一个 consumer. 其中 api 是公用的模块,服务端为它提供实现,客户端只依赖 api 编程。Provider 与 Consumer 一定要在不同的 Moddule 中,否则就不过经过 Dubbo 这个 RPC 框架而是调用的本地接口实现了。

服务接口

比如我们的 api 中有一个 String sayHello(String name) 的接口:

服务端

接口实现

然后在服务端是具体的实现:

服务端配置

服务端用配置文件暴露服务接口:

启动服务端

最后启动服务端,就可以使这个服务可用了:

客户端

客户端配置

客户端只需要使用相应的配置:

启动客户端

然后就可以获取到相应的接口实例,并调用需要的方法了:

执行结果:

Dubbo示例-运行
Dubbo示例-运行

可能遇到的问题及解决

No provider available for the service xxx

按照示例写法,但是启动服务端后一切正常,启动客户端却报错没有可用的服务提供者。
这个错误我刚刚启动客户端就遇到了,也不知道为啥,网上搜的有说 zookeeper 相关问题的,可是我们这里根本就还没引入 zookeeper 嘛,也有说配置出错的,端口不通之类的,还有一个说要关掉给手机开的热点才能用的。吓得我赶紧关掉 WiFi 共享,然而并没有什么用。最后试着用 telnet 登陆一下服务端 log 中写的那个地址(192.168.31.197:20800),也是可以登上去的,退出后再试一下,就好使了!!我断点跟踪了这么久也没找到为啥获取不到接口实例,telnet 一下就好了?黑人问号+一脸懵逼.jpg 嗯,反正我就是这么解决的。

然后看官网,发现 telnet 支持好多命令呢http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-Telnet%E5%91%BD%E4%BB%A4%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C
顺便附上 telnet 的一个截图

dubbo-telnet
dubbo-telnet

Update:其实这里主要是因为我使用的是最简单的广播模式(multicast),但是网络配置中有多个(用过Hyper-V,有虚拟机的网络),因此导致找不到服务提供者。有空的话再记录一下使用 zookeeper 作为注册中心的用法或者 Dubbo 的异步、回调相关内容~

日志不显示

项目用的 slf4j 日志接口,实现用的是 logback, 但是 Dubbo 里貌似是用的 log4j. 因此可能会有冲突,只需要引入 log4j-over-slf4j 就可以了。这个包会接管 log4j 的日志,并统一使用 slf4j 进行管理,这样项目中的 logback 配置文件就能对他起作用了。


“Dubbo 入门示例”的3个回复

Loading...
  1. 大佬……!
    这貌似都是负载均衡相关的了吧
    PS.啥时有空麻烦再帮我改下友链?抱歉又换了个域名,这回不出意外不会变了……

发表评论

电子邮件地址不会被公开。 必填项已用*标注