zoukankan      html  css  js  c++  java
  • 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>

    乾坤未定,你我皆是黑马
  • 相关阅读:
    Codeforces 1082 毛毛虫图构造&最大权闭合子图
    BZOJ 1003 最短路dp
    BZOJ 1002 生成树计数&高精度
    BZOJ 1001 平面图转对偶图
    BZOJ 世界树
    一般图极大团个数,最大团顶点数
    第十五届四川省省赛 SCU
    第十五届四川省省赛 SCU
    第十五届四川省省赛 SCU
    BZOJ4671异或图
  • 原文地址:https://www.cnblogs.com/liuqijia/p/11490565.html
Copyright © 2011-2022 走看看