一、创建Maven多模块项目

项目结构如下

模块介绍:

dubbo-api            ----API接口

dubbo-consumer ----消费者

dubbo-provider    ----生产者

dubbo-api  Service 提供的接口,provider 实现了 api 接口,并对外开放http端口,consumer依赖 api 工程,但是不会直接依赖provider工程。 这种可以让消费者仅仅依赖api工程,而不需要对provider工程的依赖,也是松耦合的经典。

(1)创建root项目

首先创建root项目,把一些通用的依赖全部放置到这里,步骤如下:

创建成功之后如下

把上面的src目录全部删除掉,只留下pom.xml

然后修改POM.XML如下成功如下:

  1. <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">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.fendo</groupId>
  4. <artifactId>Dubbo_demos</artifactId>
  5. <version>0.0.1-SNAPSHOT</version>
  6. <packaging>pom</packaging>
  7. <name>dubbo</name>
  8. <description>dubbo示例</description>
  9. <properties>
  10. <maven.compiler.source>1.8</maven.compiler.source>
  11. <maven.compiler.target>1.8</maven.compiler.target>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  14. <!-- spring版本号 -->
  15. <spring.version>4.2.5.RELEASE</spring.version>
  16. <!-- log4j日志包版本号 -->
  17. <slf4j.version>1.7.18</slf4j.version>
  18. <log4j.version>1.2.17</log4j.version>
  19. </properties>
  20. <dependencyManagement>
  21. <dependencies>
  22. <!-- 添加junit4依赖 -->
  23. <dependency>
  24. <groupId>junit</groupId>
  25. <artifactId>junit</artifactId>
  26. <version>4.11</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-core</artifactId>
  31. <version>${spring.version}</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework</groupId>
  35. <artifactId>spring-aop</artifactId>
  36. <version>${spring.version}</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-context-support</artifactId>
  41. <version>${spring.version}</version>
  42. </dependency>
  43. <!-- 添加日志相关jar包 -->
  44. <dependency>
  45. <groupId>log4j</groupId>
  46. <artifactId>log4j</artifactId>
  47. <version>${log4j.version}</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.slf4j</groupId>
  51. <artifactId>slf4j-api</artifactId>
  52. <version>${slf4j.version}</version>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.slf4j</groupId>
  56. <artifactId>slf4j-log4j12</artifactId>
  57. <version>${slf4j.version}</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>commons-logging</groupId>
  61. <artifactId>commons-logging</artifactId>
  62. <version>1.2</version>
  63. </dependency>
  64. <!-- dubbo -->
  65. <dependency>
  66. <groupId>com.alibaba</groupId>
  67. <artifactId>dubbo</artifactId>
  68. <version>2.5.3</version>
  69. <exclusions>
  70. <exclusion>
  71. <groupId>org.springframework</groupId>
  72. <artifactId>spring</artifactId>
  73. </exclusion>
  74. </exclusions>
  75. </dependency>
  76. <!-- Zookeeper zkclient-->
  77. <dependency>
  78. <groupId>com.github.sgroschupf</groupId>
  79. <artifactId>zkclient</artifactId>
  80. <version>0.1</version>
  81. </dependency>
  82. </dependencies>
  83. </dependencyManagement>
  84. </project>
 

(2)创建api项目

新建一个Module

输入module名,选择类型为java项目

点击"Finish",创建完成如下

他会自动在root目录下把dubbo-api这么module加入进来。而dubbo-api会自动继承root

(3)创建provider(生产者)

 
 

点击"Finish"生成如下

修改POM.XML为如下:

  1. <?xml version="1.0"?>
  2. <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <artifactId>Dubbo_demos</artifactId>
  7. <groupId>com.fendo</groupId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <groupId>com.fendo</groupId>
  11. <artifactId>dubbo-provider</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>dubbo-provider</name>
  14. <url>http://maven.apache.org</url>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>com.fendo</groupId>
  21. <artifactId>dubbo-api</artifactId>
  22. <version>0.0.1-SNAPSHOT</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>junit</groupId>
  26. <artifactId>junit</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-core</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework</groupId>
  34. <artifactId>spring-aop</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-context-support</artifactId>
  39. </dependency>
  40. <!-- 添加日志相关jar包 -->
  41. <dependency>
  42. <groupId>log4j</groupId>
  43. <artifactId>log4j</artifactId>
  44. </dependency>
  45. <dependency>
  46. <groupId>org.slf4j</groupId>
  47. <artifactId>slf4j-api</artifactId>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.slf4j</groupId>
  51. <artifactId>slf4j-log4j12</artifactId>
  52. </dependency>
  53. <!-- dubbo -->
  54. <dependency>
  55. <groupId>com.alibaba</groupId>
  56. <artifactId>dubbo</artifactId>
  57. <exclusions>
  58. <exclusion>
  59. <groupId>org.springframework</groupId>
  60. <artifactId>spring</artifactId>
  61. </exclusion>
  62. </exclusions>
  63. </dependency>
  64. <!-- Zookeeper zkclient-->
  65. <dependency>
  66. <groupId>com.github.sgroschupf</groupId>
  67. <artifactId>zkclient</artifactId>
  68. </dependency>
  69. </dependencies>
  70. </project>

(4)创建consumer(消费者)

创建成如下

修改POM.XML为如下:

  1. <?xml version="1.0"?>
  2. <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <artifactId>Dubbo_demos</artifactId>
  7. <groupId>com.fendo</groupId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <groupId>com.fendo</groupId>
  11. <artifactId>dubbo-consumer</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>dubbo-consumer</name>
  14. <url>http://maven.apache.org</url>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>junit</groupId>
  21. <artifactId>junit</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>com.fendo</groupId>
  25. <artifactId>dubbo-api</artifactId>
  26. <version>0.0.1-SNAPSHOT</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-core</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework</groupId>
  34. <artifactId>spring-aop</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-context-support</artifactId>
  39. </dependency>
  40. <!-- dubbo -->
  41. <dependency>
  42. <groupId>com.alibaba</groupId>
  43. <artifactId>dubbo</artifactId>
  44. <exclusions>
  45. <exclusion>
  46. <groupId>org.springframework</groupId>
  47. <artifactId>spring</artifactId>
  48. </exclusion>
  49. </exclusions>
  50. </dependency>
  51. <!-- Zookeeper zkclient-->
  52. <dependency>
  53. <groupId>com.github.sgroschupf</groupId>
  54. <artifactId>zkclient</artifactId>
  55. </dependency>
  56. </dependencies>
  57. </project>

创建完成后,整体结构如下

这种结构看起来不是很美观,把它修改成如下显示,一个项目下包含多个子模块

二、定义接口API、bo对象、公共类及方法,这些是要提供方和调用方都需要的。

在dubbo-api模块中创建一个接口对外开发

三、定义Dubbo服务service,实现dubbo-api中的api接口,书写业务逻辑及DB操作。通过spring暴露服务。

创建DemoService实现类DemoServiceImpl

  1. public class DemoServiceImpl implements DemoService {
  2. public List<String> getPermissions(Long id) {
  3. List<String> demo = new ArrayList<String>();
  4. demo.add(String.format("Permission_%d", id - 1));
  5. demo.add(String.format("Permission_%d", id));
  6. demo.add(String.format("Permission_%d", id + 1));
  7. return demo;
  8. }
  9. }

以及消费者启动类Provider

  1. public class Provider {
  2. public static void main(String[] args) throws IOException{
  3. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:provider.xml");
  4. System.out.println(context.getDisplayName() + ": here");
  5. context.start();
  6. System.out.println("服务已经启动...");
  7. System.in.read();
  8. }
  9. }

然后创建resources目录

在下新建两个xml文件

provider.xml是dubbo配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
  10. <dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
  11. <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
  12. <dubbo:registry address="zookeeper://localhost:2181"/>
  13. <!-- 用dubbo协议在20880端口暴露服务 -->
  14. <dubbo:protocol name="dubbo" port="20880" />
  15. <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
  16. <dubbo:service interface="com.fendo.dubbo.DemoService" ref="demoService" protocol="dubbo" />
  17. <!--具体实现该接口的 bean-->
  18. <bean id="demoService" class="org.dubbo.provider.impl.DemoServiceImpl"/>
  19. </beans>

如果发现eclipse提示错误

解决方案,就是下载一个dubbo.xsd文件然后

windows->preferrence->xml->xmlcatalog

add->catalog entry  ->file system 选择刚刚下载的文件路径

修改key值和配置文件的http://code.alibabatech.com/schema/dubbo/dubbo.xsd 相同,点击OK之后就不会报错了。。

dubbo.xsd文件地址:http://download.csdn.net/detail/u011781521/9914946

四、定义调用端也叫消费端,实现对应的控制层。通过spring获取服务。

和上面差不多

创建消费者运行类:

  1. public class Consumer
  2. {
  3. public static void main(String[] args) {
  4. //测试常规服务
  5. ClassPathXmlApplicationContext context =
  6. new ClassPathXmlApplicationContext("consumer.xml");
  7. context.start();
  8. System.out.println("consumer start");
  9. DemoService demoService = (DemoService) context.getBean(DemoService.class);
  10. System.out.println("consumer");
  11. System.out.println(demoService.getPermissions(1L));
  12. }
  13. }

consumer.xml配置文件为:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  7. <dubbo:application name="demotest-consumer" owner="programmer" organization="dubbox"/>
  8. <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
  9. <dubbo:registry address="zookeeper://localhost:2181"/>
  10. <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
  11. <dubbo:reference id="permissionService" interface="org.dubbo.api.DemoService"/>
  12. </beans>

五、使用zookeeper注册中心。

运行zookeeper/bin目录下的zkServer.cmd

启动zookeeper

六、启动Dubbo的service端,即provider。

启动zookeeper之后,然后运行dubbo-provider中的Provider类

启动成功之后,如上所示,然后在dubbo-admin控制台会多出一个生产者

显示还没有消费者。。

七、启动portal端,即所谓的consumer。

然后启动dubbo-consumer中的Consumer类

会打印如上信息,表示消费成功!!!

简单易懂dubbo入门实例的更多相关文章

  1. 一个最简单的Dubbo入门框架

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 1.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本 ...

  2. Dubbo入门实例--转载

    原文地址:http://blog.csdn.net/ruishenh/article/details/23180707?utm_source=tuicool 1.   概述 Dubbo是一个分布式服务 ...

  3. Dubbo入门实例 本地伪集群测试Demo

    1.   概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提 ...

  4. 分布式服务框架dubbo入门实例

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm ...

  5. WebService入门实例教程

    什么是WebService 通过使用WebService,您的应用程序可以向全世界发布信息,或提供某项功能,它是基于Web的服务,通过Web进行发布.查找和使用. WebService脚本平台需支持X ...

  6. Dubbo入门—搭建一个最简单的Demo框架

    一.Dubbo背景和简介 1.电商系统的演进 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. a.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一 ...

  7. Struts1入门实例(简单登录)

    Struts1入门实例(简单登录) 现在开始加入公司的核心项目,但由于项目开发比较早,所以使用的技术不是很新潮,前台用的还是struts1. 虽然不是什么新技术,但仍可以从中学到好多东西的.花了一个晚 ...

  8. Dubbo入门---搭建一个最简单的Demo框架(转)

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  9. Hibernate入门2.简单的项目开发实例

    Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ...

随机推荐

  1. python的协程和_IO操作

    协程Coroutine: 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行. 注意,在一个子程序中中断,去执行其他子程序,不是函数调用,有点 ...

  2. Android Screen Orientation

    Ref:Android横竖屏切换小结 Ref:Android游戏开发之横竖屏的切换(二十七)

  3. JVM性能优化, Part 2 ―― 编译器

    作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍).Eva Andreasson ...

  4. (转)Javascript模块化编程(一):模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  5. 解决ajax get方式提交中文参数乱码问题

    最近在工作中遇到,使用ajax get方式提交中文参数的时候出现乱码,通过上网搜索,总结出比较简单的两种解决方案: 第一种,由于tomcat默认的字符集是ISO-8859-1,修改Tomcat中的se ...

  6. Docker的前世今生

    核心知识点: 1.Docker的构想:对应用的封装.分发.部署.运行的生命周期的管理,一次封装到处运行 2.Docker的优点:一站式解决方案 3.Docker由LXC演变而来,迟迟没有集成到Linu ...

  7. Linux:分区

    Linux:分区 分区表 磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表. MBR MBR 中,第一个扇区最重要,里面有主要开机记录(Master ...

  8. LeetCode:长度最小的子数组【209】

    LeetCode:长度最小的子数组[209] 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 ...

  9. afinal 文件上传、下载、图片加载实例

    // Afinal框架讲解 public class AfinalActivity extends FinalActivity { @ViewInject(id=R.id.bt_afinal_load ...

  10. rails跨域请求配置

    gem 'rack-cors', '~> 0.3.1'application.rb config.middleware.insert_before 0, "Rack::Cors&quo ...