一、创建Maven多模块项目

 

项目结构如下

 

dubbo mysql实例 dubbo简单实例_maven

 

模块介绍:

 

dubbo-api            ----API接口

dubbo-consumer ----消费者

dubbo-provider    ----生产者

 

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

 

(1)创建root项目

 

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

 

dubbo mysql实例 dubbo简单实例_apache_02

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_03

 

dubbo mysql实例 dubbo简单实例_apache_04

 

创建成功之后如下

 

dubbo mysql实例 dubbo简单实例_Dubbo_05

 

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

 

 

dubbo mysql实例 dubbo简单实例_spring_06

 

然后修改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.     
10.     
11. <properties>  
12. <maven.compiler.source>1.8</maven.compiler.source>  
13. <maven.compiler.target>1.8</maven.compiler.target>  
14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
15. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
16.       
17. <!-- spring版本号 -->  
18. <spring.version>4.2.5.RELEASE</spring.version>  
19.       
20. <!-- log4j日志包版本号 -->  
21. <slf4j.version>1.7.18</slf4j.version>  
22. <log4j.version>1.2.17</log4j.version>  
23.       
24. </properties>  
25.      
26.      
27.      
28. <dependencyManagement>  
29. <dependencies>  
30.           
31. <!-- 添加junit4依赖 -->  
32. <dependency>  
33. <groupId>junit</groupId>  
34. <artifactId>junit</artifactId>  
35. <version>4.11</version>  
36. </dependency>  
37.   
38. <dependency>  
39. <groupId>org.springframework</groupId>  
40. <artifactId>spring-core</artifactId>  
41. <version>${spring.version}</version>  
42. </dependency>  
43.   
44. <dependency>  
45. <groupId>org.springframework</groupId>  
46. <artifactId>spring-aop</artifactId>  
47. <version>${spring.version}</version>  
48. </dependency>  
49. <dependency>  
50. <groupId>org.springframework</groupId>  
51. <artifactId>spring-context-support</artifactId>  
52. <version>${spring.version}</version>  
53. </dependency>  
54.   
55.      
56. <!-- 添加日志相关jar包 -->  
57. <dependency>  
58. <groupId>log4j</groupId>  
59. <artifactId>log4j</artifactId>  
60. <version>${log4j.version}</version>  
61. </dependency>  
62. <dependency>  
63. <groupId>org.slf4j</groupId>  
64. <artifactId>slf4j-api</artifactId>  
65. <version>${slf4j.version}</version>  
66. </dependency>  
67. <dependency>  
68. <groupId>org.slf4j</groupId>  
69. <artifactId>slf4j-log4j12</artifactId>  
70. <version>${slf4j.version}</version>  
71. </dependency>  
72.       
73. <dependency>  
74. <groupId>commons-logging</groupId>  
75. <artifactId>commons-logging</artifactId>  
76. <version>1.2</version>  
77. </dependency>  
78.       
79. <!-- dubbo -->  
80. <dependency>  
81. <groupId>com.alibaba</groupId>  
82. <artifactId>dubbo</artifactId>  
83. <version>2.5.3</version>  
84. <exclusions>  
85. <exclusion>  
86. <groupId>org.springframework</groupId>  
87. <artifactId>spring</artifactId>  
88. </exclusion>  
89. </exclusions>  
90. </dependency>  
91.       
92. <!-- Zookeeper zkclient-->  
93. <dependency>  
94. <groupId>com.github.sgroschupf</groupId>  
95. <artifactId>zkclient</artifactId>  
96. <version>0.1</version>  
97. </dependency>  
98.       
99. </dependencies>  
100. </dependencyManagement>  
101.     
102.     
103. </project>

 

 

 

(2)创建api项目

 

新建一个Module

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_07

 

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

 

 

dubbo mysql实例 dubbo简单实例_apache_08

 

dubbo mysql实例 dubbo简单实例_maven_09

 

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

 

dubbo mysql实例 dubbo简单实例_apache_10

 

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

 

 

dubbo mysql实例 dubbo简单实例_Dubbo_11

 

 

(3)创建provider(生产者)

 

 

dubbo mysql实例 dubbo简单实例_Dubbo_12


 

 

 

dubbo mysql实例 dubbo简单实例_maven_13

 

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_14

 

 

点击"Finish"生成如下

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_15

 

修改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.     
6. <parent>  
7. <artifactId>Dubbo_demos</artifactId>  
8. <groupId>com.fendo</groupId>  
9. <version>0.0.1-SNAPSHOT</version>  
10. </parent>  
11.     
12. <groupId>com.fendo</groupId>  
13. <artifactId>dubbo-provider</artifactId>  
14. <version>0.0.1-SNAPSHOT</version>  
15. <name>dubbo-provider</name>  
16. <url>http://maven.apache.org</url>  
17.     
18. <properties>  
19. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
20. </properties>  
21.     
22.     
23. <dependencies>  
24.     
25. <dependency>  
26. <groupId>com.fendo</groupId>  
27. <artifactId>dubbo-api</artifactId>  
28. <version>0.0.1-SNAPSHOT</version>  
29. </dependency>  
30.           
31.     
32. <dependency>  
33. <groupId>junit</groupId>  
34. <artifactId>junit</artifactId>  
35. </dependency>  
36.   
37. <dependency>  
38. <groupId>org.springframework</groupId>  
39. <artifactId>spring-core</artifactId>  
40. </dependency>  
41.   
42. <dependency>  
43. <groupId>org.springframework</groupId>  
44. <artifactId>spring-aop</artifactId>  
45. </dependency>  
46.           
47. <dependency>  
48. <groupId>org.springframework</groupId>  
49. <artifactId>spring-context-support</artifactId>  
50. </dependency>  
51.           
52.           
53. <!-- 添加日志相关jar包 -->  
54. <dependency>  
55. <groupId>log4j</groupId>  
56. <artifactId>log4j</artifactId>  
57. </dependency>  
58. <dependency>  
59. <groupId>org.slf4j</groupId>  
60. <artifactId>slf4j-api</artifactId>  
61. </dependency>  
62. <dependency>  
63. <groupId>org.slf4j</groupId>  
64. <artifactId>slf4j-log4j12</artifactId>  
65. </dependency>  
66.       
67. <!-- dubbo -->  
68. <dependency>  
69. <groupId>com.alibaba</groupId>  
70. <artifactId>dubbo</artifactId>  
71. <exclusions>  
72. <exclusion>  
73. <groupId>org.springframework</groupId>  
74. <artifactId>spring</artifactId>  
75. </exclusion>  
76. </exclusions>  
77. </dependency>  
78.       
79. <!-- Zookeeper zkclient-->  
80. <dependency>  
81. <groupId>com.github.sgroschupf</groupId>  
82. <artifactId>zkclient</artifactId>  
83. </dependency>  
84. </dependencies>  
85.     
86. </project>


 

(4)创建consumer(消费者)

 

 

dubbo mysql实例 dubbo简单实例_spring_16

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_17

 

dubbo mysql实例 dubbo简单实例_apache_18

 

 

创建成如下

 

dubbo mysql实例 dubbo简单实例_maven_19

 

 

修改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.     
6.     
7. <parent>  
8. <artifactId>Dubbo_demos</artifactId>  
9. <groupId>com.fendo</groupId>  
10. <version>0.0.1-SNAPSHOT</version>  
11. </parent>  
12.     
13. <groupId>com.fendo</groupId>  
14. <artifactId>dubbo-consumer</artifactId>  
15. <version>0.0.1-SNAPSHOT</version>  
16. <name>dubbo-consumer</name>  
17. <url>http://maven.apache.org</url>  
18.     
19.     
20. <properties>  
21. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
22. </properties>  
23.     
24.     
25. <dependencies>  
26.     
27. <dependency>  
28. <groupId>junit</groupId>  
29. <artifactId>junit</artifactId>  
30. </dependency>  
31.       
32. <dependency>  
33. <groupId>com.fendo</groupId>  
34. <artifactId>dubbo-api</artifactId>  
35. <version>0.0.1-SNAPSHOT</version>  
36. </dependency>  
37.       
38. <dependency>  
39. <groupId>org.springframework</groupId>  
40. <artifactId>spring-core</artifactId>  
41. </dependency>  
42.   
43. <dependency>  
44. <groupId>org.springframework</groupId>  
45. <artifactId>spring-aop</artifactId>  
46. </dependency>  
47.       
48. <dependency>  
49. <groupId>org.springframework</groupId>  
50. <artifactId>spring-context-support</artifactId>  
51. </dependency>  
52.   
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.      
65. <!-- Zookeeper zkclient-->  
66. <dependency>  
67. <groupId>com.github.sgroschupf</groupId>  
68. <artifactId>zkclient</artifactId>  
69. </dependency>  
70.       
71. </dependencies>  
72. </project>


 

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

 

dubbo mysql实例 dubbo简单实例_maven_20

 

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

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_21

 

 

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

 

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

 

dubbo mysql实例 dubbo简单实例_apache_22

 

 

 

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

 

创建DemoService实现类DemoServiceImpl

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

以及消费者启动类Provider

 

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

dubbo mysql实例 dubbo简单实例_spring_23

 

 

 

然后创建resources目录

 

dubbo mysql实例 dubbo简单实例_spring_24

 

在下新建两个xml文件

 

dubbo mysql实例 dubbo简单实例_apache_25

 

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. >  
9.          
10.          
11. <!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->  
12. <dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>  
13. <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->  
14. <dubbo:registry address="zookeeper://localhost:2181"/>  
15. <!-- 用dubbo协议在20880端口暴露服务 -->  
16. <dubbo:protocol name="dubbo" port="20880" />  
17. <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->  
18. <dubbo:service interface="com.fendo.dubbo.DemoService" ref="demoService" protocol="dubbo" />  
19. <!--具体实现该接口的 bean-->  
20. <bean id="demoService" class="org.dubbo.provider.impl.DemoServiceImpl"/>  
21. </beans>


如果发现eclipse提示错误

 

dubbo mysql实例 dubbo简单实例_Dubbo_26

 

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

 

windows->preferrence->xml->xmlcatalog


dubbo mysql实例 dubbo简单实例_apache_27



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


dubbo mysql实例 dubbo简单实例_dubbo mysql实例_28



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

 

dubbo.xsd文件地址:

 

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

 

和上面差不多

dubbo mysql实例 dubbo简单实例_apache_29

 

创建消费者运行类:


1. public class Consumer   
2. {  
3.     public static void main(String[] args) {  
4.         //测试常规服务  
5. context =  
6. new ClassPathXmlApplicationContext("consumer.xml");  
7.         context.start();  
8.         System.out.println("consumer start");  
9. 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. >  
7.       
8. <dubbo:application name="demotest-consumer" owner="programmer" organization="dubbox"/>  
9. <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->  
10. <dubbo:registry address="zookeeper://localhost:2181"/>  
11. <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->  
12. <dubbo:reference id="permissionService" interface="org.dubbo.api.DemoService"/>  
13.       
14. </beans>

 

五、使用zookeeper注册中心。

 

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

 

dubbo mysql实例 dubbo简单实例_apache_30

 

启动zookeeper

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

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

 

dubbo mysql实例 dubbo简单实例_maven_31

 

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

 

dubbo mysql实例 dubbo简单实例_dubbo mysql实例_32

 

显示还没有消费者。。

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

 

然后启动dubbo-consumer中的Consumer类

 

dubbo mysql实例 dubbo简单实例_apache_33

 

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