dubbo搭建例子

现在很多公司用到dubbo,使用起来是很快就学会了。真的要熟悉它还是要花点功夫的。

前面尝试看了些它的源码,这里为了调试源码,先打搭一个能跑的项目,顺别分享出来,以便刚像学习的朋友节约时间,毕竟时间至关重要。

dubbo说白了,就是个远程调用的解决方案。首先我觉得应该清晰的知道,玩这个dubbo,只需要起一个提供方,调用方,然后一个zk即可。其他杂七杂八的不要去管。翻阅了一些其他博客,都比较杂乱,把事情弄复杂了。这也是写下来的原因。dubbo文档:http://dubbo.io
以下内容非常简单,除了dubbo的知识还涉及的内容有:maven,zookeeper,spring
 
我们应该先准备好zookeeper,到官网下一个在本地启动起来,在conf文件里复制zoo_sample.cfg 出zoo.cfg,修改一下端口。
启动命令:sh zkServer.sh start
进入命令模式:sh zkCli.sh -server 127.0.0.1:2181
进入后可以通过ls / 命令查看节点情况。
下面是当我启动好customer后,我在zk上看到的效果:
 
 
注意:这里不推荐搞界面查zk的东西,浪费时间而且无用。直接到官网上看zk的命令,顺别也可以学习下zk的一些基础知识。
 
项目讲解:
把dubbo引进来,一般在实际开发中都是自己在dubbo源码的基础上改造后成为可用的一个组件,提供给上层开发者。比如dubbox。
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>dubbo</artifactId>
  <version>2.5.3</version>
  <exclusions>
    <exclusion>
      <artifactId>spring</artifactId>
      <groupId>org.springframework</groupId>
    </exclusion>
  </exclusions>
</dependency>

 

这是一个老妈叫儿子出去买吃的的故事。
建一个接口:
public interface BuyFoodService {
    String doBuy();
}

 

 作为提供方应该实现它:
public class BuyFoodServiceimpl implements BuyFoodService {
    public String doBuy() {
        System.out.println("mon whant me to buy food");
        return "ok";
    }
}

提供方的配置:

<?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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <bean id="buyFoodService" class="com.test.dubbo.service.BuyFoodServiceimpl"></bean>

    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

    <dubbo:protocol accesslog="true" name="dubbo" port="20880" />

    <dubbo:application name="son"/>

    <dubbo:service interface="com.test.dubbo.service.BuyFoodService" ref="buyFoodService"/>

</beans>

 

以上提供方就可以启动将自己的信息注册到zk上了。在zk上可以看到一个叫dubbo的节点,节点里面有个buyFoodService。

调用方的配置类似:
 
<?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:context="http://www.springframework.org/schema/context"
       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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

    <dubbo:protocol accesslog="true" name="dubbo" port="20880" />

    <dubbo:application name="mon"/>

    <dubbo:reference id="buyFoodService" interface="com.test.dubbo.service.BuyFoodService"/>

</beans>
调用代码,妈妈发起让儿子去买食物的请求:
 
public class Customer {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath*:spring/provider/applicationContext.xml");
        BuyFoodService buyFoodService = (BuyFoodService) context.getBean("buyFoodService");
        System.out.println(buyFoodService.doBuy());
    }
}
过程中遇到
报错:
java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException
解决办法,需要依赖:
<dependency>
  <groupId>com.101tec</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.10</version>
</dependency>

 

最后,当然把调好的项目共享出来:点我 然后开启你的dubbo之旅吧!

 

 

 

posted on 2017-07-27 19:55  每当变幻时  阅读(406)  评论(0编辑  收藏  举报

导航