Fork me on GitHub

springboot结合Dubbo的使用

springboot+dubbo:

 

 

 


 

在这里使用的是父子工程项目

父工程依赖:

  

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0"
  3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <groupId>com.aaa.liu.springboot.dubbo</groupId>
  8     <artifactId>springDubbo</artifactId>
  9     <packaging>pom</packaging>
 10     <version>1.0-SNAPSHOT</version>
 11     <modules>
 12         <module>dubbo-provide</module>
 13         <module>dubbo-consumer</module>
 14     </modules>
 15 
 16     <dependencyManagement>
 17 
 18         <!--
 19             springboot的jar
 20             springboot-web-starter
 21             springboot-mybatis整合包
 22             mysql驱动包
 23             druid(连接池)
 24             dubbo和spring的整合包
 25             zookeeper的服务器端包(zkServer)
 26             zookeeper的客户端包(zkClient)
 27             netty(封装了io流的框架)
 28                 IO流是创始于jdk1.4版本
 29                 NIO是在jdk的1.5版本诞生
 30                 netty最终整合了NIO,对NIO做很好的封装
 31         -->
 32         <dependencies>
 33             <dependency>
 34                 <groupId>org.springframework.boot</groupId>
 35                 <artifactId>spring-boot-starter-parent</artifactId>
 36                 <version>1.5.22.RELEASE</version>
 37             </dependency>
 38 
 39             <!--
 40                springboot-starter-web
 41            -->
 42             <dependency>
 43                 <groupId>org.springframework.boot</groupId>
 44                 <artifactId>spring-boot-starter-web</artifactId>
 45                 <version>1.5.22.RELEASE</version>
 46             </dependency>
 47             <!--
 48                 dubbo-spring-boot-starter
 49             -->
 50             <dependency>
 51                 <groupId>com.alibaba.spring.boot</groupId>
 52                 <artifactId>dubbo-spring-boot-starter</artifactId>
 53                 <version>2.0.0</version>
 54             </dependency>
 55 
 56             <!-- netty start -->
 57             <dependency>
 58                 <groupId>org.jboss.netty</groupId>
 59                 <artifactId>netty</artifactId>
 60                 <version>3.2.6.Final</version>
 61             </dependency>
 62             <!-- netty end -->
 63 
 64             <dependency>
 65                 <groupId>org.apache.zookeeper</groupId>
 66                 <artifactId>zookeeper</artifactId>
 67                 <version>3.4.6</version>
 68             </dependency>
 69 
 70             <dependency>
 71                 <groupId>com.github.sgroschupf</groupId>
 72                 <artifactId>zkclient</artifactId>
 73                 <version>0.1</version>
 74             </dependency>
 75 
 76             <!--
 77                     springboot-mybatis整合包
 78                 -->
 79             <dependency>
 80                 <groupId>org.mybatis.spring.boot</groupId>
 81                 <artifactId>mybatis-spring-boot-starter</artifactId>
 82                 <version>1.3.0</version>
 83             </dependency>
 84             <!--
 85                 mysql的驱动包
 86             -->
 87             <dependency>
 88                 <groupId>mysql</groupId>
 89                 <artifactId>mysql-connector-java</artifactId>
 90                 <version>5.1.38</version>
 91             </dependency>
 92             <!--
 93                 druid连接池
 94             -->
 95             <dependency>
 96                 <groupId>com.alibaba</groupId>
 97                 <artifactId>druid</artifactId>
 98                 <version>1.1.10</version>
 99             </dependency>
100             <!--        thymeleaf-->
101             <dependency>
102                 <groupId>org.springframework.boot</groupId>
103                 <artifactId>spring-boot-starter-thymeleaf</artifactId>
104                 <version>1.5.22.RELEASE</version>
105             </dependency>
106 
107             <!--可以不再遵循HTML标准来写页面-->
108             <dependency>
109                 <groupId>net.sourceforge.nekohtml</groupId>
110                 <artifactId>nekohtml</artifactId>
111                 <version>1.9.21</version>
112             </dependency>
113         </dependencies>
114     </dependencyManagement>
115 
116 </project>

 

子项目有两个 ,一个消费者,一个提供者。

  如果在RestFul风格中,消费者是需要依赖提供者的,由提供者进行数据操作,消费者从提供者拿。

  而在dubbo中,不需要建立层级依赖,直接远程调用

 

provider依赖:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>springDubbo</artifactId>
 7         <groupId>com.aaa.liu.springboot.dubbo</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>dubbo-provide</artifactId>
13 
14     <dependencies>
15 
16         <dependency>
17             <groupId>org.springframework.boot</groupId>
18             <artifactId>spring-boot-starter-parent</artifactId>
19             <version>1.5.22.RELEASE</version>
20             <type>pom</type>
21         </dependency>
22 
23         <dependency>
24             <groupId>org.springframework.boot</groupId>
25             <artifactId>spring-boot-starter-web</artifactId>
26         </dependency>
27 
28         <dependency>
29             <groupId>org.mybatis.spring.boot</groupId>
30             <artifactId>mybatis-spring-boot-starter</artifactId>
31         </dependency>
32 
33         <dependency>
34             <groupId>com.alibaba.spring.boot</groupId>
35             <artifactId>dubbo-spring-boot-starter</artifactId>
36         </dependency>
37 
38         <!-- netty start -->
39         <dependency>
40             <groupId>org.jboss.netty</groupId>
41             <artifactId>netty</artifactId>
42         </dependency>
43         <!-- netty end -->
44 
45         <dependency>
46             <groupId>org.apache.zookeeper</groupId>
47             <artifactId>zookeeper</artifactId>
48         </dependency>
49 
50         <dependency>
51             <groupId>com.github.sgroschupf</groupId>
52             <artifactId>zkclient</artifactId>
53         </dependency>
54 
55         <!--
56                 springboot-mybatis整合包
57             -->
58         <dependency>
59             <groupId>org.mybatis.spring.boot</groupId>
60             <artifactId>mybatis-spring-boot-starter</artifactId>
61         </dependency>
62         <!--
63             mysql的驱动包
64         -->
65         <dependency>
66             <groupId>mysql</groupId>
67             <artifactId>mysql-connector-java</artifactId>
68         </dependency>
69         <!--
70             druid连接池
71         -->
72         <dependency>
73             <groupId>com.alibaba</groupId>
74             <artifactId>druid</artifactId>
75         </dependency>
76         <!--        thymeleaf-->
77         <dependency>
78             <groupId>org.springframework.boot</groupId>
79             <artifactId>spring-boot-starter-thymeleaf</artifactId>
80         </dependency>
81 
82         <!--可以不再遵循HTML标准来写页面-->
83         <dependency>
84             <groupId>net.sourceforge.nekohtml</groupId>
85             <artifactId>nekohtml</artifactId>
86         </dependency>
87     </dependencies>
88 </project>

 

 

consumer依赖:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>springDubbo</artifactId>
 7         <groupId>com.aaa.liu.springboot.dubbo</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>dubbo-consumer</artifactId>
13 
14     <dependencies>
15 
16         <dependency>
17             <groupId>org.springframework.boot</groupId>
18             <artifactId>spring-boot-starter-parent</artifactId>
19             <version>1.5.22.RELEASE</version>
20             <type>pom</type>
21         </dependency>
22 
23         <dependency>
24             <groupId>org.springframework.boot</groupId>
25             <artifactId>spring-boot-starter-web</artifactId>
26         </dependency>
27 
28 <!--        <dependency>-->
29 <!--            <groupId>org.mybatis.spring.boot</groupId>-->
30 <!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
31 <!--        </dependency>-->
32 
33 <!--        dubbo-->
34         <dependency>
35             <groupId>com.alibaba.spring.boot</groupId>
36             <artifactId>dubbo-spring-boot-starter</artifactId>
37         </dependency>
38         <!-- netty start -->
39         <dependency>
40             <groupId>org.jboss.netty</groupId>
41             <artifactId>netty</artifactId>
42         </dependency>
43         <!-- netty end -->
44 
45         <dependency>
46             <groupId>org.apache.zookeeper</groupId>
47             <artifactId>zookeeper</artifactId>
48         </dependency>
49 
50         <dependency>
51             <groupId>com.github.sgroschupf</groupId>
52             <artifactId>zkclient</artifactId>
53         </dependency>
54 
55         <!--        thymeleaf-->
56         <dependency>
57             <groupId>org.springframework.boot</groupId>
58             <artifactId>spring-boot-starter-thymeleaf</artifactId>
59         </dependency>
60 
61         <!--可以不再遵循HTML标准来写页面-->
62         <dependency>
63             <groupId>net.sourceforge.nekohtml</groupId>
64             <artifactId>nekohtml</artifactId>
65         </dependency>
66     </dependencies>
67 </project>

 

 

provider中的配置信息:

 1 server.port=8081
 2 server.context-path=/
 3 
 4 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 5 spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false
 6 spring.datasource.username=root
 7 spring.datasource.password=123456
 8 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 9 
10 mybatis.type-aliases-package=com.aaa.liu.dubbo.model
11 mybatis.mapper-locations=classpath:mapper/*Mapper.xml
12 
13 #dubbo的配置
14 #配置dubbo的应用名(在dubbo的admin项目,可以非常直观的看出来该项目是个什么样的项目)
15 #dubbo-admin-->生产者/消费者-->application name -->需要根据当前项目所提供的功能进行命名
16 dubbo.application.name=user-provider
17 #protocol:协议
18 #配置该项目远程调用的时候所使用的协议-->dubbo(tcp,udp...)
19 #在之前所有的项目使用的协议都是http
20 dubbo.protocol.name=dubbo
21 #配置dubbo所必需使用的通讯端口号
22 #使用的端口号可以为:21881、21880、20881、20880.。。
23 dubbo.protocol.port=20881
24 #zookeeper的通讯地址
25 #dubbo配置zookeeper是因为dubbo框架集成zookeeper
26 #provide最终需要向zookeeper注册服务,也就是说必须要让provide项目知道zookeeper是哪一个
27 dubbo.registry.address=zookeeper://192.168.134.142:2181
28 #provider项目必须要让zookeeper知道具体是哪一个类/哪一些类需要注册进zookeeper中
29 #也就是说必须要让zookeeper知道所注册进注册中心的实现类是谁
30 #dubbo中也提供了包的扫描
31 dubbo.scan.base-packages=com.aaa.liu.dubbo.service.impl

 

 

provider中的入口类:

 1 package com.aaa.liu.dubbo;
 2 
 3 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
 4 
 5 import org.mybatis.spring.annotation.MapperScan;
 6 import org.springframework.boot.SpringApplication;
 7 import org.springframework.boot.autoconfigure.SpringBootApplication;
 8 
 9 /**
10  * @Author 刘其佳
11  * @DateTime 2019/9/6 17:49
12  * @Project_Name springDubbo
13  */
14 @SpringBootApplication
15 @MapperScan("com.aaa.liu.dubbo.mapper")
16 @EnableDubbo
17 public class ApplicationRun8081 {
18     public static void main(String[] args){
19         SpringApplication.run(ApplicationRun8081.class,args);
20     }
21 }

 

 

consumer中的配置信息:

 1 server.port=8082
 2 server.context-path=/
 3 
 4 #dubbo的配置
 5 #consumer中dubbo的配置和provider中只差了一行(不需要配置扫描包)
 6 dubbo.application.name=user-consumer
 7 #dubbo的协议名称
 8 dubbo.protocol.name=dubbo
 9 #dubbo的协议端口号
10 dubbo.protocol.port=20881
11 #注册中心的地址(zookeeper通讯地址)
12 dubbo.registry.address=zookeeper://192.168.134.142:2181
13 
14 spring.thymeleaf.cache=false
15 spring.thymeleaf.mode=LEGACYHTML5

 

 

consumer的入口类:

 1 package com.aaa.liu.dubbo;
 2 
 3 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 
 7 /**
 8  * @Author 刘其佳
 9  *
10  * @DateTime 2019/9/6 19:51
11  * @Project_Name springDubbo
12  */
13 
14 @SpringBootApplication
15 @EnableDubbo
16 public class ApplicationRun8082 {
17     public static void main(String[] args) {
18         SpringApplication.run(ApplicationRun8082.class,args);
19     }
20 }

 

1、在consumer控制层中,使用远程调用service时,不能再使用自动注入了,因为本项目中,service只有接口,没有实现类,使用@Reference。

2、consumer的service层和provider的service层接口要一模一样。

3、在consumer中不需要跟数据库打交道,所以不用配置数据源,因此在依赖中也不用添加mybatis,如果添加上了会报错。

  原因是:mybatis在加载时会自动注入配置好的数据源,如果找不到会报错

4、在项目中进行clear时遇到的错误:com.aaa.liu.springboot.dubbo:dubbo-consumer  referencing itself

  意思是定位到了自己。

  原因:在子工程中多添加了这个依赖:  

    <dependency>
      <groupId>com.aaa.liu.springboot.dubbo</groupId>
      <artifactId>dubbo-consumer</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

 

posted @ 2019-09-09 11:14  秋刀  阅读(631)  评论(0编辑  收藏  举报