前言
本文旨在与大家讨论阿里巴巴的开源框架dubbo的使用,网上的资料实在是太杂乱了!
希望大家多多讨论!题外话:【我爱笨媳妇】
问题背景
上面的图片已经非常生动的说明了这个问题,这个是我从dubbo的官网上盗的图,嘿嘿,既然是盗的图,那么原图链接如下:dubbo官网
我们可以看到,随着网站的业务的增多、数据量的增加,我们的架构的侧重点也有着不同的变化,由最开始的关注数据访问层,到mvc前端的控制,再到分离应用,最后到了弹性计算资源。这一切都是为了适应我们的业务场景而来的。所以说,dubbo也不是万能的,如果一个小网站搞这个架构的话,有点杀鸡用牛刀的感觉不是吗?
主题
说了dubbo这么多的好处,当然是要用起来啊,那么,今天我就为大家带来一个小小的例子,希望能为大家在学习dubbo的路上提供一点帮助。首先祭出我的我的实例代码。(这个代码的话,是在网上一个版本的基础上改的,请见谅啦!)
接口的重要性
为何我在这里强调接口的重要性,而不是去直接带领大家写一个接口,最后实现一下呢?那当然是因为这样的学习更有效果!
接口,在java的基础体系中扮演着不可或缺的角色,具体的来说,他就是一种标准的制定者,软件后期的扩展性靠的就是一个好的接口。今天,我们不讨论这么深,只是告诉大家,接口的重要意义。
我要说什么
我不会把整个工程的源代码全部贴出来,讲一遍我只说我认为重要的地方!
-
首先我要说的是zookeeper的启动,至于怎么启动呢?如何配置呢?请大家自行百度。zookeeper在我们的框架内部扮演的角色可谓非常重要,作为注册中心,我们服务端一旦有新的服务只有在注册中心注册了才能被消费端调用。所以,首先启动zookeeper吧!
-
接下来,我强调的是dubbo的配置。配置的话我分为Provider和Consumer两部分,首先来说说Provider。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-world-app" />
<!-- 配置注册中心,注意后面的address的配置,Consumer端和这里是一致的 -->
<dubbo:registry protocol="zookeeper" address="multicast://224.5.6.7:1234" />
<!-- 配置端口 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="cn.com.chinabank.web.serviceinterface.DemoService"
ref="demoService" />
<!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="cn.com.chinabank.provider.DemoServiceImpl" />
<!-- ************************************** -->
<!-- 我自己加上去的 -->
<dubbo:service interface="cn.com.chinabank.web.serviceinterface.MyService"
ref="myService" />
<!-- 和本地bean一样实现服务 -->
<bean id="myService" class="cn.com.chinabank.provider.MyServiceImpl" />
</beans>
上面的注释已经写得非常明白,address一定要注意,要不然你让它去哪里注册服务!
Consumer端的话,其实是大同小异的,但是为了大家方便起见,我还是列出来好了!
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer-of-helloworld-app" />
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="multicast://224.5.6.7:1234" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService"
interface="cn.com.chinabank.web.serviceinterface.DemoService" />
<!-- 配置本地的javabean,同远程的接口建立映射关系 -->
<bean name="chatAction" class="cn.com.chinabank.controller.ChatAction"
init-method="init">
<property name="demoService" ref="demoService" />
</bean>
<!-- ********************************************************* -->
<dubbo:reference id="myService"
interface="cn.com.chinabank.web.serviceinterface.MyService" />
<bean name="loveAction" class="cn.com.chinabank.controller.LoveAction"
init-method="init">
<property name="myService" ref="myService" />
</bean>
</beans>
只要这样配置的话,就好了,还是要注意address,灰常重要。
错误
在配置这个的过程中,我也遇到了很多的问题,下面就说出来,和大家分享!
1:在配置的时候,一开始没有启动服务端,我也是醉醉哒!
2:就是那个address折磨我最久了,所以大家一定注意!
3:在Provider要实现接口,我还以为使用了啥高大上的方法可以在一个工程里引用另一个工程的接口,结果原来是打了个jar包,我的内心是崩溃的好不!
总结
不管怎么样,今天总算是实现了这个功能,心里还是有点小激动的,对于这种dubbo有了更加深刻的认识!接口的定义的话,真的是一个重要的事情!以后再发文讨论吧!