文档章节

dubbo入门实例

加大装益达
 加大装益达
发布于 2017/03/15 17:37
字数 1118
阅读 15
收藏 0

    前几天换工作,到新公司用到了阿里的Dubbo,花了两天的时间去学习,在网上找了很多教程,感觉都不是太详细,所以动手搭了下环境,写了这篇XX。

    有关dubbo的介绍就不多说了,请查阅官方文档:http://dubbo.io/

    本次环境搭建用到的工具:IDEA,maven,zookeeper

    首先介绍下项目的大概情况,首先是一个maven父工程DubboTest,下面有三个子工程DubboConsumer,DubboProvider,DubboCommon。

        DubboTest:总的项目,父工程,需要的依赖都在这里配置。

        DubboConsumer:非web项目,dubbo的消费方。

        DubboProvider:非web项目,dubbo服务提供方。

        DubboCommon:非web项目,打成Jar包,是DubboConsumer和DubboProvider共享的包,里面定义的是公用的接口。

    以上相关的概念就不多做解释了。

    项目代码:https://git.oschina.net/dachengxi/DubboTest.git

    搭建项目:

    1.打开IDEA,New Project,选中Maven项目,不要勾选Create from archetype,点击next,填写GroupId等信息,然后再填写其他的相关信息,这个工程命名DubboTest,是父项目。

    2.进入项目之后,选择新建模块,分别简历三个子项目,过程与上面类似。分别命名为DubboConsumer,DubboProvider,DubboCommon。

    下面分别列出上面的pom文件

    DubboTest pom.xml:

    

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cheng.xi</groupId>
    <artifactId>test.dubbo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>DubboConsumer</module>
        <module>DubboProvider</module>
        <module>DubboCommon</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.1.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>


</project>


    DubboConsumer pom.xml:

    

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test.dubbo</artifactId>
        <groupId>cheng.xi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo.consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>cheng.xi</groupId>
            <artifactId>dubbo.common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

    DubboProvider pom.xml:

    

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test.dubbo</artifactId>
        <groupId>cheng.xi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo.provider</artifactId>

    <dependencies>
        <dependency>
            <groupId>cheng.xi</groupId>
            <artifactId>dubbo.common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

    

    DubboCommon pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test.dubbo</artifactId>
        <groupId>cheng.xi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo.common</artifactId>
    <packaging>jar</packaging>


</project>

    3.项目搭建完成之后,就可以开始写代码了。

    首先在DubboCommon项目中编写公共的接口,代码如下:

    

package dubbo.common.hello.service;

/**
 * Created by cheng.xi on 15/4/12.
 */
public interface HelloService {
    public void sayHello();
}

    接着写DubboProvider项目的接口实现,代码如下:


    

package dubbo.provider.hello.service.impl;

import dubbo.common.hello.service.HelloService;

/**
 * Created by cmcc on 15/4/12.
 */
public class HelloServiceImpl implements HelloService {
    @Override
    public void sayHello() {
        System.out.println("这里是Provider");
        System.out.println("HelloWorld Provider!");
    }
}

    

下面是DubboProvider中启动服务的代码:

    

package dubbo.provider.hello.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * Created by cheng.xi on 15/4/12.
 */
public class StartProvider {
    public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-provider.xml"});
        context.start();
        System.out.println("这里是dubbo-provider服务,按任意键退出");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

    最后编写DubboConsumer下的调用代码,此处使用单元测试的方式调用,代码如下:

    

package dubbo.consumer.hello.main;

import dubbo.common.hello.service.HelloService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by cheng.xi on 15/4/12.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/dubbo-consumer.xml")
public class StartConsumer {

    @Autowired
    private HelloService helloService;

    @Test
    public void test(){
        System.out.println("dubbo-consumer服务启动,调用!");
        helloService.sayHello();

    }
}

    4.上面代码已经写好,其中需要用的几个配置文件如下所示:

    dubbo-consumer.xml:

    

<?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="dubbo-consumer" />
    <dubbo:registry  protocol="zookeeper" address="127.0.0.1:2181" />

    <dubbo:reference id="helloService" interface="dubbo.common.hello.service.HelloService" />

</beans>

    dubbo-provider.xml:

    

<?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="dubbo-provider" />
    <dubbo:registry  protocol="zookeeper" address="127.0.0.1:2181" />
    <dubbo:protocol name="dubbo" port="20880" />

    <bean id="helloService" class="dubbo.provider.hello.service.impl.HelloServiceImpl" />
    <dubbo:service interface="dubbo.common.hello.service.HelloService" ref="helloService" />


</beans>

    5.至此项目中的代码编写已经完成,下一步是安装和启动zookeeper,有关过程请自己研究下。

    6.启动好了zookeeper之后,首先运行DubboProvider中的那个main方法,然后运行DubboConsumer中的test()方法。

    这就ok了。

本文出自 “大程熙的小角落” 博客,请务必保留此出处http://dachengxi.blog.51cto.com/4658215/1631581

© 著作权归作者所有

加大装益达
粉丝 31
博文 83
码字总数 138659
作品 0
浦东
高级程序员
私信 提问
如何动态获取Dubbo服务提供方地址列表

一、前言 dubbo框架本身提供了丰富的负载均衡策略,比如轮询、随机、最少活跃调用数、一致性hash等,但是有时候我们需要自己根据业务指定某个ip来进行调用。要指定ip进行调用就需要先知道服务...

01/11
0
0
使用Dubbo中需要注意的事项

一、前言 Dubbo作为高性能RPC框架,已经进入Apache卵化器项目,虽然官方给出了dubbo使用的用户手册,但是大多是一概而过,使用dubbo时候要尽量了解源码,不然会很容易入坑。 二 、服务消费端...

加多
2018/01/02
0
0
Dubbo实战一:快速入门 [译]

本文根据https://github.com/alibaba/dubbo 的README,然后实战操作记录如下: 一、简介 Dubbo不单单只是高性能的RPC调用框架,更是SOA服务治理的一种方案。 核心: 1. 远程通信,向本地调用...

泥沙砖瓦浆木匠
2016/04/03
212
0
Dubbo入门(3)-架构原理

作者:不洗碗工作室 - Marklux 出处:Dubbo入门(3)-架构原理 版权归作者所有,转载请注明出处 前言 在之前的两篇文章中,我们了解了有关分布式服务的基本概念和简单的使用。现在来了解一下d...

不洗碗工作室
2018/05/23
0
0
dubbo-2.5.4的分布式入门的第一次实例

准备工作 1:github上下载源码,导入到eclipse修改pom.xml,编译上传到自己的maven私服中。 2:安装zookeeper-3.4.6。 3:把dubbo项目中的dubbo-admin拷到tomcat中并启用。 项目名为tdubbo(...

独钓渔
2016/09/03
497
0

没有更多内容

加载失败,请刷新页面

加载更多

500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部