关于RPC框架,以前了解过一些,最近刚好有时间,看了下淘宝的dubbo框架。
首先是环境搭建:
git地址:https://github.com/alibaba/dubbo
发现从git上下载下来的Master版本,始终没有找不到dubbo-parent 这个jar,可能是项目结构调整导致的吧。
<parent>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-parent</artifactId>
<version>2.5.4-SNAPSHOT</version>
</parent>
解决办法:加入下面镜像
<mirror>
<id>ibiblio.org</id>
<name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>lvu.cn</id>
<name>lvu.cn</name>
<url>http://lvu.cn/nexus/content/groups/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
此过程可以参考:http://www.cnblogs.com/pengkw/p/3674730.html
接下来就是导入dubbo-demo工程,导入了dubbo-demo-provider 和dubbo-demo-consumer两个工程。
修改dubbo.properties配置文件
注册中心使用:dubbo.registry.address=zookeeper://127.0.0.1:2181
我在本机部署了个单点的zookeeper。
启动provider:ok
06/16 08:02:35:035 CST] main INFO zookeeper.ZooKeeper: Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.I0Itec.zkclient.ZkClient@239a0feb
[16/06/16 08:02:35:035 CST] main-SendThread() INFO zookeeper.ClientCnxn: Opening socket connection to server /127.0.0.1:2181
[16/06/16 08:02:35:035 CST] main-SendThread(localhost:2181) INFO zookeeper.ClientCnxn: Socket connection established to localhost/127.0.0.1:2181, initiating session
[16/06/16 08:02:35:035 CST] main-SendThread(localhost:2181) INFO zookeeper.ClientCnxn: Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x15551b70aa10022, negotiated timeout = 30000
[16/06/16 08:02:35:035 CST] main-EventThread INFO zkclient.ZkClient: zookeeper state changed (SyncConnected)
[16/06/16 08:02:35:035 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Register: dubbo://192.168.6.33:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.5.4-SNAPSHOT&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=60478&side=provider×tamp=1466078554778, dubbo version: 2.5.4-SNAPSHOT, current host: 127.0.0.1
[16/06/16 08:02:35:035 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Subscribe: provider://192.168.6.33:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.5.4-SNAPSHOT&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=60478&side=provider×tamp=1466078554778, dubbo version: 2.5.4-SNAPSHOT, current host: 127.0.0.1
[16/06/16 08:02:35:035 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Notify urls for subscribe url provider://192.168.6.33:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.5.4-SNAPSHOT&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=60478&side=provider×tamp=1466078554778, urls: [empty://192.168.6.33:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&category=configurators&check=false&dubbo=2.5.4-SNAPSHOT&generic=false&interface=com.alibaba.dubbo.demo.DemoService&methods=sayHello&pid=60478&side=provider×tamp=1466078554778], dubbo version: 2.5.4-SNAPSHOT, current host: 127.0.0.1
[16/06/16 08:02:35:035 CST] main INFO container.Main: [DUBBO] Dubbo SpringContainer started!, dubbo version: 2.5.4-SNAPSHOT, current host: 127.0.0.1
[2016-06-16 20:02:35] Dubbo service server started!
启动consumer,发现报错!!!
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoService': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Failed to check the status of the service com.alibaba.dubbo.demo.DemoService. No provider available for the service com.alibaba.dubbo.demo.DemoService from the url zookeeper://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=demo-consumer&check=false&dubbo=2.5.4-SNAPSHOT&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&monitor=dubbo%3A%2F%2F127.0.0.1%3A2181%2Fcom.alibaba.dubbo.registry.RegistryService%3Fapplication%3Ddemo-consumer%26dubbo%3D2.5.4-SNAPSHOT%26pid%3D30625%26protocol%3Dregistry%26refer%3Ddubbo%253D2.5.4-SNAPSHOT%2526interface%253Dcom.alibaba.dubbo.monitor.MonitorService%2526pid%253D30625%2526timestamp%253D1465960778368%26registry%3Dzookeeper%26timestamp%3D1465960778358&owner=william&pid=30625&side=consumer×tamp=1465960778280 to the consumer 192.168.6.33 use dubbo version 2.5.4-SNAPSHOT
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:173)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1467)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
... 17 more
这个蛋疼的问题,纠结了好久,发现是我机器安装了vpn,导致dubbo获取本机ip不对。去掉vpn验证ok
这样dubbo的环境算是搭建起来了。
贴上dubbo的经典架构图:
Dubbo的总体架构如下图所示:
节点角色说明:
- Provider: 暴露服务的服务提供方。
- Consumer: 调用远程服务的服务消费方。
- Registry: 服务注册与发现的注册中心。
- Monitor: 统计服务的调用次调和调用时间的监控中心。
- Container: 服务运行容器。
参考:http://dubbo.io/Home-zh.htm
http://www.cnblogs.com/pengkw/p/3674730.html