通过两个demo来演示如何使用dubbo进行RPC调用

创建一个dubbo服务提供者和一个服务消费者的普通java工程:

对服务提供者,创建一个dubbo-server-api子模块和dubbo-server模块,其中dubbo-server-api模块用来定义公共的接口

在api模块定义一个接口并打包,给dubbo client端和server端的 dubbo-server模块去依赖:

install api模块:

dubbo-server模块来实现这个定义的接口(dubbo-server首先添加dubbo-server-api的依赖)

问题来了,这里dubbo-client-service模块跟dubbo-server-service模块是两个跨进程的模块,client要调用server的接口,就得借助RPC框架来实现远程调用了,因此两个模块都需要添加dubbo依赖:
org.apache.dubbo dubbo 2.7.8
然后创建resources目录(mark as resources directory),添加dubbo配置文件,发布dubbo服务:
使用dubbo的启动类运行dubbo-server模块:
可以看到启动日志中打印了dubbo对外提供服务的协议url, 以及底层使用了netty通信框架:

服务消费端:

上面是通过普通java项目来实现dubbo服务调用的过程,不涉及服务治理和注册中心,接下来使用zookeeper作为注册中心,启动windows版本的zookeeper, 然后两个java项目都添加 zookeeper依赖:
org.apache.dubbo dubbo-dependencies-zookeeper 2.7.8 pom
并修改两个application.xml文件中的dubbo注册中心为:
启动dubbo-server和dubbo-client , 即可运行:

但是,这个时候,服务提供这个消费者都没有日志了,需要自己配置下log4j日志:
###set log levels###
log4j.rootLogger=debug, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n