美文网首页
SSM+DUBBO实战(初级demo)

SSM+DUBBO实战(初级demo)

作者: 6bc9f71c8f0c | 来源:发表于2019-03-20 17:33 被阅读0次

    项目简介,该项目采用SpringMVC+Spring+MyBatis搭建,使用dubbo作为RPC框架。项目分为三个模块,模块dubbo-api存放的是一些公共的实体类和service接口。模块dubbo-service是服务提供者,负责和数据库交互,并将服务暴露出来。模块dubbo-consumer是服务消费者,主要负责前端页面的跳转。

    DUBBO简介,官网 ,dubbo是一款高性能、开源的Java RPC框架。

    dubbo运行原理图

    项目结构

    项目思维导图

    构建父级项目

    首先我们使用maven创建一个Java项目,父项目的属性是pom,我们在父项目中先写好项目依赖,如使用的spring的版本等,当然,我们采用软引用,不强制依赖。

     <properties>
            <spring.version>4.3.7.RELEASE</spring.version>
        </properties> 
    <dependencyManagement>
      <dependencies>
        ....
       </dependencies>
        </dependencyManagement>
    
    

    具体使用到的依赖,我们后续一一列出,这里就不写出来了。

    构建服务总线-api项目

    使用maven创建dubbo-api项目,项目的packaging属性为jar。我们要在里面存放service接口和entity实现类。
    实体类Book

    public class Book implements Serializable {
        private String bookId;
        private String bookName;
        private Integer number;
        ...
    }
    

    接口BookService

    public interface BookService {
        public Book findById(String id);
    }
    
    构建服务提供者provider项目
    • 使用maven创建dubbo-provider项目,我们首先添加响应的依赖。

      1. 项目是一个springweb项目,spring-web必不可少
      2. 要连接数据库,那么必然存在事务,那么下一个就是spring-jdbc
      3. 声明式事务,还要用到切面,spring-aspects也得加进去
      4. 数据库连接,既然用了dubbo,那么另一个开源连接池必不可少,druid
      5. 当然,mysql也是需要驱动的mysql-connector-java
      6. 都说了是SSM框架,那么MyBatis框架必备mybaits,mybatis-spring
      7. 要将服务暴露出去,那么dubbo也是不能少的,我们这里用apache的2.7.0版本
      8. 没有注册中心,dubbo是不会工作的zookeeper也得加进去
      9. 既然加入了zookeeper,那么它的客户端可不能忽视,curator-recipes,curator-framework
      10. 一个正规项目还是需要日志模块的,log4j,slf4j-api加入
      11. 开发不单元测试,估计会被砍死,那么spring-test,junit进去吧。
        上面11步把依赖添加好后,我们开始写代码了。(依赖就不贴出来了,占空间)
    • web.xml项目入口配置
      我们回想下这个项目是为了干神马的?主要是为了实现数据库的调用了方法的实现。那么这个入口里面,只需要启动spring即可。怎么启动spring呢?官方提供的方案就是监听ContextLoaderListener。spring是需要读取xml里面的配置的,默认的文件是WEB-INF/applicationContext.xml,不好意思,我们是maven项目,我更喜欢放到resource下面,那么如何设定呢?spring源码中ContextLoader类告诉了我们有个contextConfigLocation的属性,只需要设置这个属性即可。代码如下

       <!-- 上下文配置文件 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-context.xml</param-value>
        </context-param>
    
        <!-- 监听器 加载配置上下文配置文件-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    

    要使项目可扩展,那么spring-context.xml文件我们只干一件事情,就是聚合其他的配置文件。

     <import resource="/config/*.xml"/>
    
    • 数据库的配置spring-jdbc
      如何有条理的配置数据源呢?
      第一步,读取jdbc.properties
      第二步,初始化DruidDataSource
      第三步,初始化事务管理器DataSourceTransactionManager
      第四步,设定事务的传播级别和规则。
      第五步,写好一个切面

    • mybatis的配置spring-mybatis
      mybatis的配置比较简单,我们先定义SqlSessionFactoryBean再定义MapperScannerConfigurer

    • service的配置spring-service
      service干的活更少了,我们只需要加入包扫描就可以了。

     <context:component-scan base-package="com.zwq.core.service"/>
    
    • dubbo的配置dubbo-provider
      配置dubbo分五步:
      第一步:定义服务名。<dubbo:application
      第二步:指定注册中心<dubbo:registry
      第三步:指定暴露端口<dubbo:protocol
      第四步:指定服务接口<dubbo:service
      第五步:传统的接口指向实现类定义。

    • 编写Java代码实现
      简单实现一个查询功能,那么我们定义一个BookDao,然后定义一个BookServiceImpl就好了。这里发现,我们需要添加dubbo-api的依赖,否则无法实现BookService接口就没法玩了。代码太过简单,这里不列出来了

    构建服务消费者consumer项目

    使用maven创建dubbo-consumer项目,老规矩,先看看依赖吧。

    • 依赖

      1. 前端专用,那么spring-webmvc ~~get
      2. jsp页面那么jstl
      3. dubbo还是要的
      4. zookeeper 还是不能少
      5. 客户端,加入curator-client就可以了
      6. 先添加总线的dubbo-api依赖吧,别又忘了
    • 项目入口,web.xml
      spring mvc的入口DispatcherServlet配置然后配置拦截url-pattern:/就好了。还有DispatcherServlet的contextConfigLocation指定成classpath:spring-mvc.xml

    • spring-mvc.xml

    1. controller包扫描加入
    2. 静态资源映射
    3. 定义下视图解析器
    <context:component-scan base-package="com.zwq.core.controller"/>
     <mvc:annotation-driven/>
     <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    • dubbo-consumer.xml
      首先在spring-mvc.xml中记得引入,要不然,读不到的<import resource='dubbo-consumer.xml'.
      dubbo-consumer.xml配置分4步
      第一步:定义名字
      第二步:定义注册中心,其实非必要
      第三步:定义接口引用<dubbo:reference interface="com.zwq.core.service.BookService" id="bookService" url="dubbo://127.0.0.1:20880"/>
      第四步:设置超时时间<dubbo:consumer

    • 编写controller

     @GetMapping("/listBookById.do")
        public String listBookById(Model model, @RequestParam String id){
            Book book = bookService.findById(id);
            log.info("book:{}",book.toString());
            model.addAttribute("book",book);
            return "showBook";
        }
    

    结束语
    这个项目只是对dubbo的一个初级应用,在实际的生产环境中应该会更加额复杂,我也是出于学习阶段并没有实际开发过线上的dubbo项目,其中可能有很多不成熟的观点,需要不断的学习和进步。

    相关文章

      网友评论

          本文标题:SSM+DUBBO实战(初级demo)

          本文链接:https://www.haomeiwen.com/subject/zuxtvqtx.html